# ╔╗╔┌─┐┬─┐┌─┐┬ ┬ # ║║║├┤ ├┬┘│ └┬┘ # ╝╚╝└─┘┴└─└─┘ ┴ # Code is licensed under CC-BY-NC-ND 4.0 unless otherwise specified. # https://creativecommons.org/licenses/by-nc-nd/4.0/ # You CANNOT edit this file without direct permission from the author. # You can redistribute this file without any changes. # meta developer: @nercymods # scope: hikka_min 1.6.2 import requests from hikkatl.tl.types import Message from .. import loader, utils @loader.tds class GameInfo(loader.Module): """Module for fetching game information from RAWG""" strings = { "name": "GameInfo", "game_not_found": "❌ Game not found", "fetching": "🌐 Fetching game information...", "no_api": "❌ Please insert your api key in config (.cfg GameInfo)", "error_fetching": "❌ Error fetching game information", "game": "🎮Name: %s", "release": ( "📆Data released: %s" ), "rawg_rating": ( "⭐️Rating: %s" ), "platforms": ( "🏴‍☠️Platforms: %s" ), "genres": "🎶Genres: %s", "screenshots": ( "📸Screenshots: %s" ), } strings_ru = { "game_not_found": "❌ Игра не найдена", "fetching": "🌐 Получение информации об игре...", "no_api": "❌ Пожалуйста укажите api-ключ в конфиге (.cfg GameInfo)", "error_fetching": "❌ Ошибка при получении информации об игре", "game": "🎮Название: %s", "release": ( "📆Дата релиза: %s" ), "rawg_rating": ( "⭐️Рейтинг: %s" ), "platforms": ( "🏴‍☠️Платформы: %s" ), "genres": "🎶Жанры: %s", "screenshots": ( "📸Скриншоты: %s" ), } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "api_key", None, lambda: "Your API token from https://rawg.io/apidocs (If you are from Russia use VPN)", validator=loader.validators.Hidden(), ) ) @loader.command(ru_doc="Получить информацию об игре <название игры>") async def gameinfo(self, message: Message): """Fetch game information from RAWG""" if self.config['api_key'] == None: await utils.answer(message, self.strings('no_api')) return if not (game_name := utils.get_args_raw(message)): await utils.answer(message, self.strings("game_not_found")) return await utils.answer(message, self.strings("fetching")) try: url = f"https://api.rawg.io/api/games?key={self.config['api_key']}&search={game_name}" response = await utils.run_sync(requests.get, url) if response.status_code == 404: await utils.answer(message, self.strings("game_not_found")) return response.raise_for_status() data = response.json()["results"][0] game_name = data.get("name", "N/A") released_date = data.get("released", "N/A") rating = data.get("rating", "N/A") platforms_str = ( ", ".join( platform["platform"]["name"] for platform in data.get("platforms", []) ) or "N/A" ) genres_str = ( ", ".join(genre["name"] for genre in data.get("genres", [])) or "N/A" ) response = await utils.run_sync( requests.get, f"https://api.rawg.io/api/games/{data['id']}/screenshots?key={self.config['api_key']}", ) screenshots = [] if response.status_code == 200: screenshots_data = response.json()["results"][:3] for screenshot in screenshots_data: screenshots.append(screenshot["image"]) screenshots_str = ", ".join(screenshots) if screenshots else "N/A" game_info_message = ( self.strings("game") % game_name + "\n" + self.strings("release") % released_date + "\n" + self.strings("rawg_rating") % rating + "\n" + self.strings("platforms") % platforms_str + "\n" + self.strings("genres") % genres_str + "\n" + self.strings("screenshots") % screenshots_str ) await utils.answer(message, game_info_message) except Exception: await utils.answer(message, self.strings("error_fetching"))