aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Leon Sandøy <[email protected]>2018-10-11 12:12:32 +0200
committerGravatar Leon Sandøy <[email protected]>2018-10-11 12:12:32 +0200
commit5e2abfd06ebe5d3011fbbcc818d85e215f358969 (patch)
treea800567d389918002f97a31ee9348658e7d3ce18
parentAdding Pale Man, fixing all flake8 issues, converting halloweenify to use aio... (diff)
Made the movie formatter less naïve. It no longer crashes if TMDB's return data is incomplete.
-rw-r--r--bot/cogs/movie.py51
1 files changed, 39 insertions, 12 deletions
diff --git a/bot/cogs/movie.py b/bot/cogs/movie.py
index 51529bc9..82b9c682 100644
--- a/bot/cogs/movie.py
+++ b/bot/cogs/movie.py
@@ -67,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