From 17b4703748d6e0b8f92e8679b7b6799c20097d11 Mon Sep 17 00:00:00 2001 From: Will Da Silva Date: Mon, 5 Oct 2020 14:14:01 -0400 Subject: Replace OMDB with TMDB Closes: #136 --- bot/constants.py | 1 - bot/exts/evergreen/snakes/_snakes_cog.py | 94 +++++++++++++++----------------- 2 files changed, 43 insertions(+), 52 deletions(-) (limited to 'bot') diff --git a/bot/constants.py b/bot/constants.py index e113428e..d2e10ae1 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -184,7 +184,6 @@ class Roles(NamedTuple): class Tokens(NamedTuple): giphy = environ.get("GIPHY_TOKEN") aoc_session_cookie = environ.get("AOC_SESSION_COOKIE") - omdb = environ.get("OMDB_API_KEY") youtube = environ.get("YOUTUBE_API_KEY") tmdb = environ.get("TMDB_API_KEY") nasa = environ.get("NASA_API_KEY") diff --git a/bot/exts/evergreen/snakes/_snakes_cog.py b/bot/exts/evergreen/snakes/_snakes_cog.py index a846274b..9216c054 100644 --- a/bot/exts/evergreen/snakes/_snakes_cog.py +++ b/bot/exts/evergreen/snakes/_snakes_cog.py @@ -15,6 +15,7 @@ import aiohttp import async_timeout from PIL import Image, ImageDraw, ImageFont from discord import Colour, Embed, File, Member, Message, Reaction +from discord.errors import HTTPException from discord.ext.commands import BadArgument, Bot, Cog, CommandError, Context, bot_has_permissions, group from bot.constants import ERROR_REPLIES, Tokens @@ -739,71 +740,62 @@ class Snakes(Cog): @snakes_group.command(name='movie') async def movie_command(self, ctx: Context) -> None: """ - Gets a random snake-related movie from OMDB. + Gets a random snake-related movie from TMDB. Written by Samuel. Modified by gdude. + Modified by Will Da Silva. """ - url = "http://www.omdbapi.com/" - page = random.randint(1, 27) + page = random.randint(1, 16) - response = await self.bot.http_session.get( - url, - params={ - "s": "snake", - "page": page, - "type": "movie", - "apikey": Tokens.omdb - } - ) - data = await response.json() - movie = random.choice(data["Search"])["imdbID"] - - response = await self.bot.http_session.get( - url, - params={ - "i": movie, - "apikey": Tokens.omdb - } - ) - data = await response.json() - - embed = Embed( - title=data["Title"], - color=SNAKE_COLOR - ) - - del data["Response"], data["imdbID"], data["Title"] - - for key, value in data.items(): - if not value or value == "N/A" or key in ("Response", "imdbID", "Title", "Type"): - continue + async with ctx.typing(): + response = await self.bot.http_session.get( + "https://api.themoviedb.org/3/search/movie", + params={ + "query": "snake", + "page": page, + "language": "en-US", + "api_key": Tokens.tmdb, + } + ) + data = await response.json() + movie = random.choice(data["results"])["id"] + + response = await self.bot.http_session.get( + f"https://api.themoviedb.org/3/movie/{movie}", + params={ + "language": "en-US", + "api_key": Tokens.tmdb, + } + ) + data = await response.json() - if key == "Ratings": # [{'Source': 'Internet Movie Database', 'Value': '7.6/10'}] - rating = random.choice(value) + embed = Embed(title=data["title"], color=SNAKE_COLOR) - if rating["Source"] != "Internet Movie Database": - embed.add_field(name=f"Rating: {rating['Source']}", value=rating["Value"]) + if data["poster_path"] is not None: + embed.set_image(url=f"https://images.tmdb.org/t/p/original{data['poster_path']}?api_key={Tokens.tmdb}") - continue + embed.add_field(name="Overview", value=data["overview"]) - if key == "Poster": - embed.set_image(url=value) - continue + embed.add_field(name="Release Date", value=data["release_date"]) - elif key == "imdbRating": - key = "IMDB Rating" + if data["genres"]: + embed.add_field(name="Genres", value=", ".join([x["name"] for x in data["genres"]])) - elif key == "imdbVotes": - key = "IMDB Votes" + if data["vote_count"]: + embed.add_field(name="Rating", value=f"{data['vote_average']}/10 ({data['vote_count']} votes)", inline=True) - embed.add_field(name=key, value=value, inline=True) + if data["budget"] and data["revenue"]: + embed.add_field(name="Budget", value=data["budget"], inline=True) + embed.add_field(name="Revenue", value=data["revenue"], inline=True) - embed.set_footer(text="Data provided by the OMDB API") + embed.set_footer(text="Data provided by the TMDB") - await ctx.channel.send( - embed=embed - ) + try: + await ctx.channel.send(embed=embed) + except HTTPException as err: + await ctx.channel.send("An error occurred while fetching a snake-related movie!") + raise err from None @snakes_group.command(name='quiz') @locked() -- cgit v1.2.3 From 86e4b815e07c058b9af200540c5a6032a9d4f98a Mon Sep 17 00:00:00 2001 From: Will Da Silva Date: Thu, 8 Oct 2020 10:37:37 -0400 Subject: Fix TMDB leak --- bot/exts/evergreen/snakes/_snakes_cog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot') diff --git a/bot/exts/evergreen/snakes/_snakes_cog.py b/bot/exts/evergreen/snakes/_snakes_cog.py index 9216c054..5e7a1169 100644 --- a/bot/exts/evergreen/snakes/_snakes_cog.py +++ b/bot/exts/evergreen/snakes/_snakes_cog.py @@ -773,7 +773,7 @@ class Snakes(Cog): embed = Embed(title=data["title"], color=SNAKE_COLOR) if data["poster_path"] is not None: - embed.set_image(url=f"https://images.tmdb.org/t/p/original{data['poster_path']}?api_key={Tokens.tmdb}") + embed.set_image(url=f"https://images.tmdb.org/t/p/original{data['poster_path']}") embed.add_field(name="Overview", value=data["overview"]) -- cgit v1.2.3 From 1a1ebf1a53542259ac202d4f4a4ba25d949a2f25 Mon Sep 17 00:00:00 2001 From: Will Da Silva Date: Tue, 13 Oct 2020 15:06:40 -0400 Subject: Set the number of movie pages fetched on first request --- bot/exts/evergreen/snakes/_snakes_cog.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'bot') diff --git a/bot/exts/evergreen/snakes/_snakes_cog.py b/bot/exts/evergreen/snakes/_snakes_cog.py index 5e7a1169..a7740b94 100644 --- a/bot/exts/evergreen/snakes/_snakes_cog.py +++ b/bot/exts/evergreen/snakes/_snakes_cog.py @@ -152,6 +152,7 @@ class Snakes(Cog): self.snake_idioms = utils.get_resource("snake_idioms") self.snake_quizzes = utils.get_resource("snake_quiz") self.snake_facts = utils.get_resource("snake_facts") + self.num_movie_pages = None # region: Helper methods @staticmethod @@ -746,7 +747,8 @@ class Snakes(Cog): Modified by gdude. Modified by Will Da Silva. """ - page = random.randint(1, 16) + # Initially 8 pages are fetched. The actual number of pages is set after the first request. + page = random.randint(1, self.num_movie_pages or 8) async with ctx.typing(): response = await self.bot.http_session.get( @@ -759,6 +761,8 @@ class Snakes(Cog): } ) data = await response.json() + if self.num_movie_pages is None: + self.num_movie_pages = data["total_pages"] movie = random.choice(data["results"])["id"] response = await self.bot.http_session.get( -- cgit v1.2.3 From 60277653cdfd66f9721667544b379b793f87b1a6 Mon Sep 17 00:00:00 2001 From: Will Da Silva Date: Fri, 16 Oct 2020 11:05:22 -0400 Subject: Comply with TMDB ToS --- bot/exts/evergreen/snakes/_snakes_cog.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'bot') diff --git a/bot/exts/evergreen/snakes/_snakes_cog.py b/bot/exts/evergreen/snakes/_snakes_cog.py index a7740b94..75234e7d 100644 --- a/bot/exts/evergreen/snakes/_snakes_cog.py +++ b/bot/exts/evergreen/snakes/_snakes_cog.py @@ -793,7 +793,8 @@ class Snakes(Cog): embed.add_field(name="Budget", value=data["budget"], inline=True) embed.add_field(name="Revenue", value=data["revenue"], inline=True) - embed.set_footer(text="Data provided by the TMDB") + embed.set_footer(text="This product uses the TMDb API but is not endorsed or certified by TMDb.") + embed.set_thumbnail(url="https://i.imgur.com/LtFtC8H.png") try: await ctx.channel.send(embed=embed) -- cgit v1.2.3 From 6bf4974f1975600c2943d8eae46fe24bf1f6a69e Mon Sep 17 00:00:00 2001 From: Will Da Silva Date: Fri, 16 Oct 2020 11:06:18 -0400 Subject: Fix empty field in snake movie embed --- bot/exts/evergreen/snakes/_snakes_cog.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'bot') diff --git a/bot/exts/evergreen/snakes/_snakes_cog.py b/bot/exts/evergreen/snakes/_snakes_cog.py index 75234e7d..0b3a8fe5 100644 --- a/bot/exts/evergreen/snakes/_snakes_cog.py +++ b/bot/exts/evergreen/snakes/_snakes_cog.py @@ -779,9 +779,11 @@ class Snakes(Cog): if data["poster_path"] is not None: embed.set_image(url=f"https://images.tmdb.org/t/p/original{data['poster_path']}") - embed.add_field(name="Overview", value=data["overview"]) + if data["overview"]: + embed.add_field(name="Overview", value=data["overview"]) - embed.add_field(name="Release Date", value=data["release_date"]) + if data["release_date"]: + embed.add_field(name="Release Date", value=data["release_date"]) if data["genres"]: embed.add_field(name="Genres", value=", ".join([x["name"] for x in data["genres"]])) -- cgit v1.2.3 From 2e4e50216508dd89314b093872f2d5477f94aa10 Mon Sep 17 00:00:00 2001 From: William Da Silva Date: Tue, 29 Dec 2020 00:24:10 -0500 Subject: Remove unused import --- bot/exts/evergreen/snakes/_snakes_cog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot') diff --git a/bot/exts/evergreen/snakes/_snakes_cog.py b/bot/exts/evergreen/snakes/_snakes_cog.py index f18014a8..d5e4f206 100644 --- a/bot/exts/evergreen/snakes/_snakes_cog.py +++ b/bot/exts/evergreen/snakes/_snakes_cog.py @@ -16,7 +16,7 @@ import async_timeout from PIL import Image, ImageDraw, ImageFont from discord import Colour, Embed, File, Member, Message, Reaction from discord.errors import HTTPException -from discord.ext.commands import BadArgument, Bot, Cog, CommandError, Context, bot_has_permissions, group +from discord.ext.commands import Bot, Cog, CommandError, Context, bot_has_permissions, group from bot.constants import ERROR_REPLIES, Tokens from bot.exts.evergreen.snakes import _utils as utils -- cgit v1.2.3