diff options
| author | 2018-10-09 23:15:29 +0200 | |
|---|---|---|
| committer | 2018-10-09 23:15:29 +0200 | |
| commit | a3d339dcb35de62d3c83fec6ce7bc095ef239004 (patch) | |
| tree | 936e9bd21419cd80dc8e4c258742a4b3517b4ad2 /bot/cogs/movie.py | |
| parent | Merge pull request #22 from ninexball/master (diff) | |
| parent | spelling (diff) | |
Merge pull request #23 from rgables/master
Added cog for random scary movie
Diffstat (limited to '')
| -rw-r--r-- | bot/cogs/movie.py | 99 | 
1 files changed, 99 insertions, 0 deletions
| diff --git a/bot/cogs/movie.py b/bot/cogs/movie.py new file mode 100644 index 00000000..bb6f8df8 --- /dev/null +++ b/bot/cogs/movie.py @@ -0,0 +1,99 @@ +import requests +import random +from os import environ +from discord.ext import commands +from discord import Embed + +TMDB_API_KEY = environ.get('TMDB_API_KEY') +TMDB_TOKEN = environ.get('TMDB_TOKEN') + + +class Movie: +    """ +    Selects a random scary movie and embeds info into discord chat +    """ + +    def __init__(self, bot): +        self.bot = bot + +    @commands.command(name='movie', alias=['tmdb'], brief='Pick a scary movie') +    async def random_movie(self, ctx): +        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 +        response = requests.get(url=url, params=params, headers=headers) +        total_pages = response.json().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 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'}) + +        return selection.json() + +    @staticmethod +    async def format_metadata(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') + +        cast = [] +        for actor in movie.get('credits').get('cast')[:3]: +            cast.append(actor.get('name')) + +        director = movie.get('credits').get('crew')[0].get('name') + +        rating_count = movie.get('vote_average') / 2 +        rating = '' + +        for i in range(int(rating_count)): +            rating += ':skull:' + +        if (rating_count % 1) >= .5: +            rating += ':bat:' + +        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) +        embed.set_footer(text='powered by themoviedb.org') + +        return embed + + +def setup(bot): +    bot.add_cog(Movie(bot)) | 
