diff options
Diffstat (limited to 'bot/cogs/movie.py')
| -rw-r--r-- | bot/cogs/movie.py | 78 | 
1 files changed, 55 insertions, 23 deletions
| diff --git a/bot/cogs/movie.py b/bot/cogs/movie.py index 647ee22a..82b9c682 100644 --- a/bot/cogs/movie.py +++ b/bot/cogs/movie.py @@ -1,7 +1,7 @@  import random  from os import environ -import requests +import aiohttp  from discord import Embed  from discord.ext import commands @@ -42,19 +42,24 @@ class Movie:          }          # Get total page count of horror movies -        response = requests.get(url=url, params=params, headers=headers) -        total_pages = response.json().get('total_pages') +        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 = requests.get(url=url, params=params, headers=headers) -        selection_id = random.choice(response.json().get('results')).get('id') +            # 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 = requests.get(url='https://api.themoviedb.org/3/movie/' + str(selection_id), -                                 params={'api_key': TMDB_API_KEY, 'append_to_response': 'credits'}) +            # 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 selection.json() +            return await selection.json()      @staticmethod      async def format_metadata(movie): @@ -62,36 +67,63 @@ class Movie:          Formats raw TMDb data to be embedded in discord chat          """ -        tmdb_url = 'https://www.themoviedb.org/movie/' + str(movie.get('id')) -        poster = 'https://image.tmdb.org/t/p/original' + movie.get('poster_path') +        # 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]: +        for actor in movie.get('credits', {}).get('cast', [])[:3]:              cast.append(actor.get('name')) -        director = movie.get('credits').get('crew')[0].get('name') +        # Get director name +        director = movie.get('credits', {}).get('crew', []) +        if director: +            director = director[0].get('name') -        rating_count = movie.get('vote_average') / 2 +        # 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')          ) -        embed.set_image(url=poster) -        embed.add_field(name='Starring', value=', '.join(cast)) -        embed.add_field(name='Directed by', value=director) -        embed.add_field(name='Year', value=movie.get('release_date')[:4]) -        embed.add_field(name='Runtime', value=str(movie.get('runtime')) + ' min') -        embed.add_field(name='Spooky Rating', value=rating) + +        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 | 
