# ╔╗╔┌─┐┬─┐┌─┐┬ ┬
# ║║║├┤ ├┬┘│ └┬┘
# ╝╚╝└─┘┴└─└─┘ ┴
# 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"))