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): messageText += "\n"+str(x+1)+") "+movie["title"]+" ("+str(movie["year"])+")" 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): messageText += "\n"+str(x+1)+") "+show["title"]+" ("+str(show["year"])+")" 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)