# █▀▀ ▄▀█   █▀▄▀█ █▀█ █▀▄ █▀ # █▀░ █▀█   █░▀░█ █▄█ █▄▀ ▄█ # https://t.me/famods # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # --------------------------------------------------------------------------------- # Name: Wakatime # Description: Показывает твою Wakatime статистику # meta developer: @FAmods # meta banner: https://github.com/FajoX1/FAmods/blob/main/assets/banners/wakatime.png?raw=true # requires: httpx # --------------------------------------------------------------------------------- import httpx import asyncio import logging from .. import loader, utils logger = logging.getLogger(__name__) @loader.tds class Wakatime(loader.Module): """Показывает твою Wakatime статистику""" strings = { "name": "Wakatime", "loading": "🕑 Загрузка статистики...", "no_token": "🚫 Wakatime токен не поставлен! Поставь его в {}cfg wakatime", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "WAKATIME_TOKEN", None, lambda: "Твой wakatime токен. Получить токен: https://wakatime.com/settings/account", validator=loader.validators.Hidden(loader.validators.String()), ) ) async def client_ready(self, client, db): self.db = db self._client = client async def _get_data(self, endpoint, token): url = f"https://wakatime.com/api/v1/users/current/{endpoint}?api_key={token}" async with httpx.AsyncClient() as client: response = await client.get(url) return response async def get_waka(self, token): endpoints = ["status_bar/today", "stats/all_time", "stats/all_time", "all_time_since_today"] responses = await asyncio.gather(*(self._get_data(endpoint, token) for endpoint in endpoints)) data_today, data_all_time, data_stats_s, data_all_time_since_today = [response.json() for response in responses] all_time = data_all_time_since_today["data"]["text"] username = data_all_time["data"]["username"] if not username: username = "Нету" try: languages = data_all_time["data"]["languages"] except: languages = [] today = data_today["data"]["categories"] try: os = data_all_time["data"]["operating_systems"] except: pass OS = ", ".join([f"{stat['name']}" for stat in os if stat["text"] != "0 secs"]) editor = data_all_time["data"]["editors"] EDITOR = ", ".join([f"{stat['name']} " for stat in editor if stat["text"] != "0 secs"]) try: LANG = "\n".join([f"▫️ {stat['name']}: {stat['text']}" for stat in languages if stat["text"] != "0 secs"]) except: LANG = "" TODAY = "\n".join([f"{stat['text']}" for stat in today if stat["text"] != "0 secs"]) return f"""🧑‍💻 Юзернейм: {username} 🕑 За всё время: {all_time} 📃 Сегодня: {TODAY} 🖥 ОС: {OS} 💻 Редактор: {EDITOR} 💈 Языки программирования {LANG}\n""" @loader.command() async def waka(self, message): """Посмотреть свою статистику в Wakatime""" token = self.config["WAKATIME_TOKEN"] if token is None: return await utils.answer(message, self.strings["no_token"].format(self.get_prefix())) await utils.answer(message, self.strings["loading"]) waka_text = await self.get_waka(token) await utils.answer(message, waka_text)