diff options
| -rw-r--r-- | bot/seasons/evergreen/game.py | 65 | 
1 files changed, 35 insertions, 30 deletions
diff --git a/bot/seasons/evergreen/game.py b/bot/seasons/evergreen/game.py index a240c69e..d378c34e 100644 --- a/bot/seasons/evergreen/game.py +++ b/bot/seasons/evergreen/game.py @@ -73,18 +73,25 @@ class Games(Cog):          async with self.http_session.get(BASE_URL + "genres", data=body, headers=HEADERS) as resp:              result = await resp.json() -        self.genres = {genre['name'].capitalize(): genre['id'] for genre in result} +        genres = {genre['name'].capitalize(): genre['id'] for genre in result} + +        self.genres = {}          # Manual check genres, replace sentences with words -        for genre in self.genres.keys(): +        for genre in genres:              if genre == "Role-playing (rpg)": -                self.genres["Rpg"] = self.genres.pop(genre) +                self.genres["Role-playing"] = genres[genre] +                self.genres["Rpg"] = genres[genre]              elif genre == "Turn-based strategy (tbs)": -                self.genres["Tbs"] = self.genres.pop(genre) +                self.genres["Turn-based-strategy"] = genres[genre] +                self.genres["Tbs"] = genres[genre]              elif genre == "Real time strategy (rts)": -                self.genres["Rts"] = self.genres.pop(genre) +                self.genres["Real-time-strategy"] = genres[genre] +                self.genres["Rts"] = genres[genre]              elif genre == "Hack and slash/beat 'em up": -                self.genres["Hack-and-slash"] = self.genres.pop(genre) +                self.genres["Hack-and-slash"] = genres[genre] +            else: +                self.genres[genre] = genres[genre]      @group(name='games', aliases=['game'], invoke_without_command=True)      async def games(self, ctx: Context, genre: str = "", amount: int = 5) -> None: @@ -141,7 +148,7 @@ class Games(Cog):      @games.command(name='genres', aliases=['genre', 'g'])      async def genres(self, ctx: Context) -> None:          """Get all available genres.""" -        await ctx.send(f"Currently available genres: {', '.join(f'`{genre}`' for genre in self.genres.keys())}") +        await ctx.send(f"Currently available genres: {', '.join(f'`{genre}`' for genre in self.genres)}")      @games.command(name='search', aliases=['s'])      async def search(self, ctx: Context, *, search: str) -> None: @@ -179,13 +186,16 @@ class Games(Cog):              -> List[Dict[str, Any]]:          """Get Games List from IGDB API."""          # Create body of IGDB API request, define fields, sorting, offset, limit and genre -        body = f"""fields cover.image_id, first_release_date, total_rating, name, storyline, url, platforms.name, -status, involved_companies.company.name, summary, age_ratings.category, age_ratings.rating, total_rating_count; -{f'sort {sort};' if sort else ''} -offset {offset}; -limit {limit}; -{f'where genres = ({genre});' if genre else ''} -{additional_body}""" +        body = "fields cover.image_id, first_release_date, total_rating, name, storyline, url, platforms.name, " +        body += "status, involved_companies.company.name, summary, age_ratings.category, age_ratings.rating, " +        body += "total_rating_count;\n" + +        body += f"sort {sort};\n" if sort else '' +        body += f"offset {offset};\n" +        body += f"limit {limit};\n" + +        body += f"where genres = ({genre});" if genre else '' +        body += additional_body          # Do request to IGDB API, create headers, URL, define body, return result          async with client.get( @@ -198,8 +208,7 @@ limit {limit};      async def get_pages(self, data: List[Dict[str, Any]]) -> List[Tuple[str, str]]:          """Generate all game pages, do additional requests to IGDB API."""          pages = [] -        for game in data: -            pages.append(await self.create_page(game)) +        [pages.append(await self.create_page(game)) for game in data]          return pages      async def create_page(self, data: Dict[str, Any]) -> Tuple[str, str]: @@ -207,33 +216,30 @@ limit {limit};          # Create page content variable, what will be returned          page = "" -        # Get keys to one variable. Used for code style -        keys = data.keys() -          # If game have cover, generate URL of Cover, if not, let url empty -        if 'cover' in keys: +        if 'cover' in data:              url = f"{IMAGE_BASE_URL}t_cover_big/{data['cover']['image_id']}.jpg"          else:              url = ""          # Add title with hyperlink and check for storyline          page += f"**[{data['name']}]({data['url']})**\n" -        page += data['summary'] + "\n\n" if 'summary' in keys else "\n" +        page += data['summary'] + "\n\n" if 'summary' in data else "\n"          # Add release date if key is in game information -        if 'first_release_date' in keys: +        if 'first_release_date' in data:              page += f"**Release Date:** {datetime.utcfromtimestamp(data['first_release_date']).date()}\n"          # Add other information -        page += f"**Rating:** {'{0:.2f}'.format(data['total_rating']) if 'total_rating' in keys else '?'}/100 " -        page += f":star: (based on {data['total_rating_count'] if 'total_rating_count' in keys else '?'})\n" +        page += f"**Rating:** {'{0:.2f}'.format(data['total_rating']) if 'total_rating' in data else '?'}/100 " +        page += f":star: (based on {data['total_rating_count'] if 'total_rating_count' in data else '?'})\n"          page += f"**Platforms:** " -        page += f"{', '.join(pf['name'] for pf in data['platforms']) if 'platforms' in keys else '?'}\n" +        page += f"{', '.join(pf['name'] for pf in data['platforms']) if 'platforms' in data else '?'}\n" -        page += f"**Status:** {GameStatus(data['status']).name if 'status' in keys else '?'}\n" +        page += f"**Status:** {GameStatus(data['status']).name if 'status' in data else '?'}\n" -        if 'age_ratings' in keys: +        if 'age_ratings' in data:              rating = f"""{', '.join(AgeRatingCategories(age['category']).name + ' ' + AgeRatings(age['rating']).name                                      for age in data['age_ratings'])}"""              page += f"**Age Ratings:** {rating}\n" @@ -245,7 +251,7 @@ limit {limit};          page += f"**Made by:** {companies}\n"          page += "\n" -        page += data['storyline'] if 'storyline' in data.keys() else '' +        page += data['storyline'] if 'storyline' in data else ''          return page, url @@ -296,8 +302,7 @@ offset {offset};"""          pages = []          # Loop over companies, add them to pages listing and return pages -        for co in data: -            pages.append(await self.create_company_page(co)) +        [pages.append(await self.create_company_page(co)) for co in data]          return pages  |