164 lines
6.2 KiB
Python
164 lines
6.2 KiB
Python
import requests, imdb, discord, json
|
||
from funcs import logThis
|
||
|
||
radarrURL = "http://localhost:7878/api/v3/"
|
||
sonarrURL = "http://192.168.0.40:8989/api/"
|
||
moviePath = "/media/plex/Server/movies/"
|
||
showPath = "/media/plex/Server/Shows/"
|
||
|
||
class BedreNetflix():
|
||
def __init__(self,bot):
|
||
self.bot = bot
|
||
|
||
#Returns a list of no more than 5 options when user requests a movie
|
||
async def requestMovie(self, ctx, movieName):
|
||
logThis("Searching for "+movieName)
|
||
movieList = imdb.IMDb().search_movie(movieName)
|
||
movies = []
|
||
for movie in movieList:
|
||
if movie["kind"] == "movie":
|
||
movies.append(movie)
|
||
if len(movies) > 5:
|
||
movies = movies[:5]
|
||
|
||
if len(movies) == 1:
|
||
messageTitle = "**Is it this movie?**"
|
||
else:
|
||
messageTitle = "**Is it any of these movies?**"
|
||
|
||
messageText = ""
|
||
imdbIds = []
|
||
|
||
for x, movie in enumerate(movies):
|
||
try:
|
||
messageText += "\n"+str(x+1)+") "+movie["title"]+" ("+str(movie["year"])+")"
|
||
except:
|
||
try:
|
||
messageText += "\n"+str(x+1)+") "+movie["title"]
|
||
except:
|
||
messageText += "Error"
|
||
imdbIds.append(movie.movieID)
|
||
|
||
logThis("Returning a list of "+str(len(movies))+" possible movies: "+str(imdbIds))
|
||
|
||
em = discord.Embed(title=messageTitle,description=messageText,colour=0x00FF00)
|
||
|
||
message = await ctx.send(embed=em)
|
||
|
||
messageData = {"messageID":message.id,"imdbIds":imdbIds}
|
||
|
||
with open("resources/bedreNetflix/oldMessage"+str(ctx.channel.id),"w") as f:
|
||
json.dump(messageData,f)
|
||
|
||
if len(movies) == 1:
|
||
await message.add_reaction("✔️")
|
||
else:
|
||
for x in range(len(movies)):
|
||
await message.add_reaction(["1️⃣","2️⃣","3️⃣","4️⃣","5️⃣"][x])
|
||
|
||
await message.add_reaction("❌")
|
||
|
||
#Adds the requested movie to Bedre Netflix
|
||
async def addMovie(self,channel,imdbId):
|
||
if imdbId == None:
|
||
logThis("Did not find what the user was searching for")
|
||
await channel.send("Try searching for the IMDB id")
|
||
else:
|
||
logThis("Trying to add movie "+str(imdbId))
|
||
apiKey = self.bot.credentials.radarrKey
|
||
response = requests.get(radarrURL+"movie/lookup/imdb?imdbId=tt"+imdbId+"&apiKey="+apiKey)
|
||
lookupData = response.json()
|
||
postData = {"qualityProfileId": 1,
|
||
"rootFolderPath" : moviePath,
|
||
"monitored" : True,
|
||
"addOptions": {"searchForMovie": True}}
|
||
for key in ["tmdbId","title","titleSlug","images","year"]:
|
||
postData.update({key : lookupData[key]})
|
||
|
||
r = requests.post(url= radarrURL+"movie?apikey="+apiKey,json = postData)
|
||
|
||
if r.status_code == 201:
|
||
await channel.send("Movie successfully added to Bedre Netflix")
|
||
logThis("Added a movie to Bedre Netflix")
|
||
elif r.status_code == 400:
|
||
await channel.send("The movie is already on Bedre Netflix")
|
||
else:
|
||
await channel.send("Something went wrong")
|
||
logThis(str(r.status_code)+" "+r.reason)
|
||
|
||
#Returns a list of no more than 5 options when user requests a show
|
||
async def requestShow(self, ctx, showName):
|
||
logThis("Searching for "+showName)
|
||
movies = imdb.IMDb().search_movie(showName) #Replace with tvdb
|
||
shows = []
|
||
for movie in movies:
|
||
if movie["kind"] == "tv series":
|
||
shows.append(movie)
|
||
if len(shows) > 5:
|
||
shows = shows[:5]
|
||
|
||
if len(shows) == 1:
|
||
messageTitle = "**Is it this show?**"
|
||
else:
|
||
messageTitle = "**Is it any of these shows?**"
|
||
|
||
messageText = ""
|
||
imdbNames = []
|
||
|
||
for x, show in enumerate(shows):
|
||
try:
|
||
messageText += "\n"+str(x+1)+") "+show["title"]+" ("+str(show["year"])+")"
|
||
except:
|
||
try:
|
||
messageText += "\n"+str(x+1)+") "+show["title"]
|
||
except:
|
||
messageText += "Error"
|
||
imdbNames.append(show["title"])
|
||
|
||
logThis("Returning a list of "+str(len(shows))+" possible shows: "+str(imdbNames))
|
||
|
||
em = discord.Embed(title=messageTitle,description=messageText,colour=0x00FF00)
|
||
|
||
message = await ctx.send(embed=em)
|
||
|
||
messageData = {"messageID":message.id,"imdbNames":imdbNames}
|
||
|
||
with open("resources/bedreNetflix/oldMessage"+str(ctx.channel.id),"w") as f:
|
||
json.dump(messageData,f)
|
||
|
||
if len(shows) == 1:
|
||
await message.add_reaction("✔️")
|
||
else:
|
||
for x in range(len(shows)):
|
||
await message.add_reaction(["1️⃣","2️⃣","3️⃣","4️⃣","5️⃣"][x])
|
||
|
||
await message.add_reaction("❌")
|
||
|
||
#Adds the requested show to Bedre Netflix
|
||
async def addShow(self,channel,imdbName):
|
||
if imdbName == None:
|
||
logThis("Did not find what the user was searching for")
|
||
await channel.send("Try searching for the IMDB id")
|
||
else:
|
||
logThis("Trying to add show "+str(imdbName))
|
||
apiKey = self.bot.credentials.sonarrKey
|
||
response = requests.get(sonarrURL+"series/lookup?term="+imdbName.replace(" ","%20")+"&apiKey="+apiKey)
|
||
lookupData = response.json()[0]
|
||
postData = {"ProfileId" : 1,
|
||
"rootFolderPath" : showPath,
|
||
"monitored" : True,
|
||
"addOptions" : {"searchForMissingEpisodes" : True}}
|
||
for key in ["tvdbId","title","titleSlug","images","seasons"]:
|
||
postData.update({key : lookupData[key]})
|
||
|
||
r = requests.post(url= sonarrURL+"series?apikey="+apiKey,json = postData)
|
||
|
||
if r.status_code == 201:
|
||
await channel.send("Show successfully added to Bedre Netflix")
|
||
logThis("Added a show to Bedre Netflix")
|
||
elif r.status_code == 400:
|
||
await channel.send("The show is already on Bedre Netflix")
|
||
else:
|
||
await channel.send("Something went wrong")
|
||
logThis(str(r.status_code)+" "+r.reason)
|