# ------------------------------------------------------------
# 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)))