aboutsummaryrefslogtreecommitdiffstats
path: root/bot/cogs/hacktober/scarymovie.py
diff options
context:
space:
mode:
Diffstat (limited to 'bot/cogs/hacktober/scarymovie.py')
-rw-r--r--bot/cogs/hacktober/scarymovie.py137
1 files changed, 0 insertions, 137 deletions
diff --git a/bot/cogs/hacktober/scarymovie.py b/bot/cogs/hacktober/scarymovie.py
deleted file mode 100644
index c2298c65..00000000
--- a/bot/cogs/hacktober/scarymovie.py
+++ /dev/null
@@ -1,137 +0,0 @@
-import random
-from os import environ
-
-import aiohttp
-from discord import Embed
-from discord.ext import commands
-
-
-TMDB_API_KEY = environ.get('TMDB_API_KEY')
-TMDB_TOKEN = environ.get('TMDB_TOKEN')
-
-
-class ScaryMovie:
- """
- Selects a random scary movie and embeds info into discord chat
- """
-
- def __init__(self, bot):
- self.bot = bot
-
- @commands.command(name='movie', alias=['tmdb'])
- async def random_movie(self, ctx):
- """
- Randomly select a scary movie and display information about it.
- """
- async with ctx.typing():
- selection = await self.select_movie()
- movie_details = await self.format_metadata(selection)
-
- await ctx.send(embed=movie_details)
-
- @staticmethod
- async def select_movie():
- """
- Selects a random movie and returns a json of movie details from TMDb
- """
-
- url = 'https://api.themoviedb.org/4/discover/movie'
- params = {
- 'with_genres': '27',
- 'vote_count.gte': '5'
- }
- headers = {
- 'Authorization': 'Bearer ' + TMDB_TOKEN,
- 'Content-Type': 'application/json;charset=utf-8'
- }
-
- # Get total page count of horror movies
- async with aiohttp.ClientSession() as session:
- response = await session.get(url=url, params=params, headers=headers)
- total_pages = await response.json()
- total_pages = total_pages.get('total_pages')
-
- # Get movie details from one random result on a random page
- params['page'] = random.randint(1, total_pages)
- response = await session.get(url=url, params=params, headers=headers)
- response = await response.json()
- selection_id = random.choice(response.get('results')).get('id')
-
- # Get full details and credits
- selection = await session.get(
- url='https://api.themoviedb.org/3/movie/' + str(selection_id),
- params={'api_key': TMDB_API_KEY, 'append_to_response': 'credits'}
- )
-
- return await selection.json()
-
- @staticmethod
- async def format_metadata(movie):
- """
- Formats raw TMDb data to be embedded in discord chat
- """
-
- # Build the relevant URLs.
- movie_id = movie.get("id")
- poster_path = movie.get("poster_path")
- tmdb_url = f'https://www.themoviedb.org/movie/{movie_id}' if movie_id else None
- poster = f'https://image.tmdb.org/t/p/original{poster_path}' if poster_path else None
-
- # Get cast names
- cast = []
- for actor in movie.get('credits', {}).get('cast', [])[:3]:
- cast.append(actor.get('name'))
-
- # Get director name
- director = movie.get('credits', {}).get('crew', [])
- if director:
- director = director[0].get('name')
-
- # Determine the spookiness rating
- rating = ''
- rating_count = movie.get('vote_average', 0)
-
- if rating_count:
- rating_count /= 2
-
- for _ in range(int(rating_count)):
- rating += ':skull:'
- if (rating_count % 1) >= .5:
- rating += ':bat:'
-
- # Try to get year of release and runtime
- year = movie.get('release_date', [])[:4]
- runtime = movie.get('runtime')
- runtime = f"{runtime} minutes" if runtime else None
-
- # Not all these attributes will always be present
- movie_attributes = {
- "Directed by": director,
- "Starring": ', '.join(cast),
- "Running time": runtime,
- "Release year": year,
- "Spookiness rating": rating,
- }
-
- embed = Embed(
- colour=0x01d277,
- title='**' + movie.get('title') + '**',
- url=tmdb_url,
- description=movie.get('overview')
- )
-
- if poster:
- embed.set_image(url=poster)
-
- # Add the attributes that we actually have data for, but not the others.
- for name, value in movie_attributes.items():
- if value:
- embed.add_field(name=name, value=value)
-
- embed.set_footer(text='powered by themoviedb.org')
-
- return embed
-
-
-def setup(bot):
- bot.add_cog(ScaryMovie(bot))