# ------------------------------------------------------------ # Module: GitHubInfo # Description: Module for GitHub profile information. # Author: @kmodules # ------------------------------------------------------------ # Licensed under the GNU AGPLv3 # https:/www.gnu.org/licenses/agpl-3.0.html # ------------------------------------------------------------ # Author: @MeKsenon # Commands: .github # scope: hikka_only # meta developer: @kmodules # ------------------------------------------------------------ import requests from datetime import datetime from .. import loader, utils __version__ = (1, 0, 1) @loader.tds class GitHubInfoMod(loader.Module): """Module for viewing GitHub profile information""" strings = { "name": "GitHubInfo", "no_username": "⚠️ Please specify a username!", "user_not_found": " User not found", "error": "⚠️ Error getting data: {}", "loading": "⚙️ Loading information...", "repos": "repositories", "no_data": "No data" } strings_ru = { "name": "GitHubInfo", "no_username": "⚠️ Укажите имя пользователя!", "user_not_found": " Пользователь не найден", "error": "⚠️ Ошибка при получении данных: {}", "loading": "⚙️ Загружаю информацию...", "repos": "репозиториев", "no_data": "Нет данных" } async def client_ready(self, client, db): self.client = client @loader.command(ru_doc=" - получить информацию о профиле GitHub", en_doc=" - get GitHub profile information") async def github(self, message): args = utils.get_args_raw(message) if not args: await utils.answer(message, self.strings["no_username"]) return await utils.answer(message, self.strings["loading"]) try: r = requests.get(f"https://api.github.com/users/{args}") if r.status_code == 404: await utils.answer(message, self.strings["user_not_found"]) return if r.status_code != 200: await utils.answer(message, self.strings["error"].format("Invalid API response")) return user = r.json() repos = requests.get(f"https://api.github.com/users/{args}/repos") repos_data = repos.json() languages = {} for repo in repos_data: if repo['language'] and not repo['fork']: languages[repo['language']] = languages.get(repo['language'], 0) + 1 top_langs = sorted(languages.items(), key=lambda x: x[1], reverse=True)[:3] if len(top_langs) > 1: langs_parts = [] for i, lang in enumerate(top_langs): prefix = " ┣ " if i < len(top_langs)-1 else " ┗ " langs_parts.append(f"{prefix}{lang[0]}: {lang[1]} {self.strings['repos']}") langs_text = "\n".join(langs_parts) elif len(top_langs) == 1: langs_text = f" ┗ {top_langs[0][0]}: {top_langs[0][1]} {self.strings['repos']}" else: langs_text = f" ┗ {self.strings['no_data']}" created = datetime.strptime(user['created_at'], "%Y-%m-%dT%H:%M:%SZ") created_date = created.strftime("%d.%m.%Y") text = ( f"😸 Github profile:\n\n" f"👤 Main information:\n" f" ┣ Github username: {user['login']}\n" f" ┣ Company: {user['company'] or '❌'}\n" f" ┣ Account created: {created_date}\n" f" ┣ Website: {user['blog'] or '❌'}\n" f" ┗ Email: {user['email'] or '❌'}\n\n" f"📊 Statistics:\n" f" ┣ Followers: {user['followers']}\n" f" ┣ Following: {user['following']}\n" f" ┣ Public repositories: {user['public_repos']}\n" f" ┗ Public gists: {user['public_gists']}\n\n" f"💡 Most used languages:\n" f"{langs_text}" ) await utils.answer(message, text) except Exception as e: await utils.answer(message, self.strings["error"].format(str(e)))