""" _ __ _____ ___ ___ ___ __| | ___ _ __ \ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__| \ V /\__ \ __/ (_| (_) | (_| | __/ | \_/ |___/\___|\___\___/ \__,_|\___|_| Copyleft 2022 t.me/vsecoder This program is free software; you can redistribute it and/or modify """ # meta developer: @vsecoder_m # meta desc: Module for getting information about minecraft Hypixel player # meta pic: https://img.icons8.com/cute-clipart/64/minecraft-logo.png # meta banner: https://chojuu.vercel.app/api/banner?img=https://img.icons8.com/cute-clipart/64/minecraft-logo.png&title=Hypixel&description=Module%20for%20getting%20information%20about%20minecraft%20Hypixel%20player __version__ = (1, 1, 1) import logging import aiohttp from telethon import TelegramClient from telethon.tl.types import Message from .. import loader, utils # type: ignore logger = logging.getLogger(__name__) class HypixelAPI: def __init__(self, token): self.token = token self.api = "https://api.hypixel.net" self.uuid_link = "https://api.mojang.com/users/profiles/minecraft/{}" async def _request(self, url: str, method: str = "GET") -> dict: async with aiohttp.ClientSession() as session: async with session.request(method, url) as response: return await response.json() async def get_uuid(self, nickname): link = self.uuid_link.format(nickname) return await self._request(link) async def get_player_data(self, uuid): link = f"{self.api}/player?key={self.token}&uuid={uuid}" return await self._request(link) async def recent_games(self, uuid): link = f"{self.api}/recentgames?key={self.token}&uuid={uuid}" return await self._request(link) async def player_status(self, uuid): link = f"{self.api}/status?key={self.token}&uuid={uuid}" return await self._request(link) def to_string(self, data: dict, last_games: dict, online: dict) -> str: nick = data["player"]["displayname"] data = data["player"]["stats"] last_game = last_games["games"][-1] return f"""{nick} {"🟒" if online["session"]["online"] else "πŸ”΄"} πŸ›Œ Bedwars: Coins: {data["Bedwars"]["coins"]} Win Streak: {data["Bedwars"]["winstreak"]} Games: {data["Bedwars"]["wins_bedwars"]} wins, {data["Bedwars"]["losses_bedwars"]} losses 🏝 Skywars: Coins: {data["SkyWars"]["coins"]} Win Streak: {data["SkyWars"]["win_streak"]} Games: {data["SkyWars"]["wins"]} wins, {data["SkyWars"]["losses"]} losses Kills: {data["SkyWars"]["kills"]} πŸ”ͺ Murder Mystery: Coins: {data["MurderMystery"]["coins"]} Games: {data["MurderMystery"]["wins"]} wins in {data["MurderMystery"]["games"]} games Kills: {data["MurderMystery"]["kills"]} πŸ‘· Build Battle: Wins: {data["BuildBattle"]["wins"]} Coins: {data["BuildBattle"]["coins"]} βš”οΈ Duels: Wins: {data["Duels"]["wins"]} wins, {data["Duels"]["losses"]} losses Kills: {data["Duels"]["kills"]} Coins: {data["Duels"]["coins"]} πŸ“„ Last game: {last_game['gameType']} """ @loader.tds class HypixelMod(loader.Module): """ Module for getting information about minecraft Hypixel player (beta) """ strings = { "name": "Hypixel", "template": '
{}
', "not_token": "Token not found in config!", "_cfg_token": "Yandex.Music account token", "_cfg_uuid": "Minecraft UUID", "_cfg_nickname": "Minecraft nickname", "guide": ( "ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² .config ΠΏΠΎ " 'ссылкС!' ), } strings_ru = { "not_token": "Π’ΠΎΠΊΠ΅Π½ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅!", "_cfg_token": "Π’ΠΎΠΊΠ΅Π½ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° ЯндСкс.ΠœΡƒΠ·Ρ‹ΠΊΠ°", "_cfg_uuid": "ΠœΠ°ΠΉΠ½ΠΊΡ€Π°Ρ„Ρ‚ UUID", "_cfg_nickname": "НикнСйм Π² ΠΈΠ³Ρ€Π΅", "guide": ( "Get a token and write it in .config by " 'link!' ), } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "HypixelToken", None, self.strings["_cfg_token"], validator=loader.validators.Hidden(), ), loader.ConfigValue( "UUID", None, self.strings["_cfg_uuid"], validator=loader.validators.String(), ), loader.ConfigValue( "nickname", "Pain_4986", self.strings["_cfg_nickname"], validator=loader.validators.String(), ), ) async def on_dlmod(self): if not self.get("guide_send", False): await self.inline.bot.send_message( self._tg_id, self.strings["guide"], ) self.set("guide_send", True) async def client_ready(self, client: TelegramClient, db): self.client = client self.db = db @loader.command() async def statcmd(self, message: Message): """Get stats about Hypixel player""" token = self.config["HypixelToken"] if not token: return await utils.answer(message, self.strings["not_token"]) hypixel = HypixelAPI(token) uuid = self.config["UUID"] if not self.config["UUID"]: uuid = (await hypixel.get_uuid(self.config["nickname"]))["id"] self.config["UUID"] = uuid try: data = await hypixel.get_player_data(uuid) last_games = await hypixel.recent_games(uuid) online = await hypixel.player_status(uuid) except Exception as e: return await utils.answer(message, str(e)) answer = hypixel.to_string(data, last_games, online) return await utils.answer(message, self.strings["template"].format(answer))