From 98c2b6789ccbadd786ecb316d2dde412629459f4 Mon Sep 17 00:00:00 2001 From: kwzrd Date: Tue, 10 Dec 2019 23:27:35 +0100 Subject: Add bookmark icon url to constants --- bot/constants.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'bot/constants.py') diff --git a/bot/constants.py b/bot/constants.py index c09d8369..71f56a09 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -4,6 +4,7 @@ from typing import NamedTuple from datetime import datetime __all__ = ( + "bookmark_icon_url", "AdventOfCode", "Channels", "Client", "Colours", "Emojis", "Hacktoberfest", "Roles", "Tokens", "WHITELISTED_CHANNELS", "STAFF_ROLES", "MODERATION_ROLES", "POSITIVE_REPLIES", "NEGATIVE_REPLIES", "ERROR_REPLIES", @@ -11,6 +12,11 @@ __all__ = ( log = logging.getLogger(__name__) +bookmark_icon_url = ( + "https://images-ext-2.discordapp.net/external/zl4oDwcmxUILY7sD9ZWE2fU5R7n6QcxEmPYSE5eddbg/" + "%3Fv%3D1/https/cdn.discordapp.com/emojis/654080405988966419.png?width=20&height=20" +) + class AdventOfCode: leaderboard_cache_age_threshold_seconds = 3600 -- cgit v1.2.3 From 7ec299251afd794d10e82e66fd9cb4c9c0f744ea Mon Sep 17 00:00:00 2001 From: F4zii Date: Mon, 17 Feb 2020 17:11:37 +0200 Subject: Paginator Migration - Added trashcan emoji to constants.py --- bot/constants.py | 1 + bot/pagination.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'bot/constants.py') diff --git a/bot/constants.py b/bot/constants.py index eca4f67b..2c68f719 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -88,6 +88,7 @@ class Emojis: christmas_tree = "\U0001F384" check = "\u2611" envelope = "\U0001F4E8" + trashcan = "<:trashcan:637136429717389331>" terning1 = "<:terning1:431249668983488527>" terning2 = "<:terning2:462339216987127808>" diff --git a/bot/pagination.py b/bot/pagination.py index a024e0d9..9a7a0382 100644 --- a/bot/pagination.py +++ b/bot/pagination.py @@ -6,11 +6,13 @@ from discord import Embed, Member, Reaction from discord.abc import User from discord.ext.commands import Context, Paginator +from bot.constants import Emojis + FIRST_EMOJI = "\u23EE" # [:track_previous:] LEFT_EMOJI = "\u2B05" # [:arrow_left:] RIGHT_EMOJI = "\u27A1" # [:arrow_right:] LAST_EMOJI = "\u23ED" # [:track_next:] -DELETE_EMOJI = "<:trashcan:637136429717389331>" # [:trashcan:] +DELETE_EMOJI = Emojis.trashcan # [:trashcan:] PAGINATION_EMOJI = (FIRST_EMOJI, LEFT_EMOJI, RIGHT_EMOJI, LAST_EMOJI, DELETE_EMOJI) -- cgit v1.2.3 From afd087fb949d892e644b304676ff81791be8909d Mon Sep 17 00:00:00 2001 From: ks123 Date: Mon, 17 Feb 2020 19:12:25 +0200 Subject: Added .movies genres|genre|g command. Made .movies command docstring smaller. Added warning loggings. Better Some Numbers section formatting. --- bot/constants.py | 1 + bot/seasons/evergreen/movie.py | 88 ++++++++++++++++++++---------------------- 2 files changed, 43 insertions(+), 46 deletions(-) (limited to 'bot/constants.py') diff --git a/bot/constants.py b/bot/constants.py index eca4f67b..0a9af1dd 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -132,6 +132,7 @@ class Tokens(NamedTuple): 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") # Default role combinations diff --git a/bot/seasons/evergreen/movie.py b/bot/seasons/evergreen/movie.py index 949da665..4bc59655 100644 --- a/bot/seasons/evergreen/movie.py +++ b/bot/seasons/evergreen/movie.py @@ -1,19 +1,16 @@ import logging import random from enum import Enum -from os import environ from typing import Any, Dict, List, Tuple from urllib.parse import urlencode from aiohttp import ClientSession from discord import Embed -from discord.ext.commands import Bot, Cog, Context, command +from discord.ext.commands import Bot, Cog, Context, group +from bot.constants import Tokens from bot.pagination import ImagePaginator -# Get TMDB API key from .env -TMDB_API_KEY = environ.get('TMDB_API_KEY') - # Define base URL of TMDB BASE_URL = "https://api.themoviedb.org/3/" @@ -21,7 +18,7 @@ logger = logging.getLogger(__name__) # Define movie params, that will be used for every movie request MOVIE_PARAMS = { - "api_key": TMDB_API_KEY, + "api_key": Tokens.tmdb, "language": "en-US" } @@ -55,32 +52,12 @@ class Movie(Cog): self.bot = bot self.http_session: ClientSession = bot.http_session - @command(name='movies', aliases=['movie']) + @group(name='movies', aliases=['movie'], invoke_without_command=True) async def movies(self, ctx: Context, genre: str = "", amount: int = 5) -> None: """ - Get random movies by specifing genre. - - Also support amount parameter, - that define how much movies will be shown. Default 5 - - Available genres: - - Action - - Adventure - - Animation - - Comedy - - Crime - - Documentary - - Drama - - Family - - Fantasy - - History - - Horror - - Music - - Mystery - - Romance - - Science - - Thriller - - Western + Get random movies by specifying genre. Also support amount parameter, that define how much movies will be shown. + + Default 5. Use .movies genres to get all available genres. """ # Check is there more than 20 movies specified, due TMDB return 20 movies # per page, so this is max. Also you can't get less movies than 1, just logic @@ -91,25 +68,31 @@ class Movie(Cog): await ctx.send("You can't get less than 1 movies. Just logic.") return - # Capitalize genre for getting data from Enum, get random page + # Capitalize genre for getting data from Enum, get random page, send help when genre don't exist. genre = genre.capitalize() - page = random.randint(1, 200) - - # Get movies list from TMDB, check is results key in result. When not, raise error. When genre not exist, - # show help. try: - movies = await self.get_movies_list(self.http_session, MovieGenres[genre].value, page) + result = await self.get_movies_list(self.http_session, MovieGenres[genre].value, 1) except KeyError: await ctx.send_help('movies') return - if 'results' not in movies.keys(): - err_text = f'There was problem while fetching movies list. Problematic response:\n```{movies}```' - err = Embed(title=':no_entry: Error :no_entry:', description=err_text) - await ctx.send(embed=err) - logger.warning(err_text) + # Check is results is result. If not, throw error. + if "results" not in result.keys(): + err_msg = f"There is problem while making TMDB API request. Response Code: {result['status_code']}, " \ + f"{result['status_message']}." + await ctx.send(err_msg) + logger.warning(err_msg) - return + # Get random page. Max page is last page where is movies with this genre. + page = random.randint(1, result["total_pages"]) + + # Get movies list from TMDB, check is results key in result. When not, raise error. + movies = await self.get_movies_list(self.http_session, MovieGenres[genre].value, page) + if 'results' not in movies.keys(): + err_msg = f"There is problem while making TMDB API request. Response Code: {result['status_code']}, " \ + f"{result['status_message']}." + await ctx.send(err_msg) + logger.warning(err_msg) # Get all pages and embed pages = await self.get_pages(self.http_session, movies, amount) @@ -117,11 +100,16 @@ class Movie(Cog): await ImagePaginator.paginate(pages, ctx, embed) + @movies.command(name='genres', aliases=['genre', 'g']) + async def genres(self, ctx: Context) -> None: + """Show all currently available genres for .movies command.""" + await ctx.send(f"Current available genres: {', '.join('`' + genre.name + '`' for genre in MovieGenres)}") + async def get_movies_list(self, client: ClientSession, genre_id: str, page: int) -> Dict[str, Any]: """Return JSON of TMDB discover request.""" # Define params of request params = { - "api_key": TMDB_API_KEY, + "api_key": Tokens.tmdb, "language": "en-US", "sort_by": "popularity.desc", "include_adult": "false", @@ -181,9 +169,17 @@ class Movie(Cog): text += "__**Some Numbers**__\n" - text += f"**Budget:** ${movie['budget'] if movie['budget'] else '?'}\n" - text += f"**Revenue:** ${movie['revenue'] if movie['revenue'] else '?'}\n" - text += f"**Duration:** {movie['runtime']} minutes\n\n" + budget = f"{movie['budget']:,d}" if movie['budget'] else "?" + revenue = f"{movie['revenue']:,d}" if movie['revenue'] else "?" + + if movie['runtime'] is not None: + duration = divmod(movie['runtime'], 60) + else: + duration = ("?", "?") + + text += f"**Budget:** ${budget}\n" + text += f"**Revenue:** ${revenue}\n" + text += f"**Duration:** {f'{duration[0]} hour(s) {duration[1]} minute(s)'}\n\n" text += movie['overview'] -- cgit v1.2.3