mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-18 15:14:18 +02:00
Compare commits
2 Commits
update-sub
...
update-sub
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
086ad660ba | ||
|
|
e6f45bd09e |
@@ -3,18 +3,58 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import requests
|
import requests
|
||||||
import json
|
|
||||||
|
|
||||||
def parse_repos(file_path: str) -> list:
|
repos = [
|
||||||
"""Parse repository URLs from a given json file."""
|
"https://github.com/DziruModules/hikkamods",
|
||||||
repos = []
|
"https://github.com/kamolgks/Hikkamods",
|
||||||
with open(file_path, "r", encoding="utf-8") as f:
|
"https://github.com/thomasmod/hikkamods",
|
||||||
data = json.load(f)
|
"https://github.com/SkillsAngels/Modules",
|
||||||
for repo in data.get("repositories", []):
|
"https://github.com/Sad0ff/modules-ftg",
|
||||||
repos.append(repo["url"])
|
"https://github.com/Yahikoro/Modules-for-FTG",
|
||||||
return repos
|
"https://github.com/KeyZenD/modules",
|
||||||
|
"https://github.com/AlpacaGang/ftg-modules",
|
||||||
|
"https://github.com/trololo65/Modules",
|
||||||
|
"https://github.com/Ijidishurka/modules",
|
||||||
|
"https://github.com/Fl1yd/FTG-Modules",
|
||||||
|
"https://github.com/D4n13l3k00/FTG-Modules",
|
||||||
|
"https://github.com/iamnalinor/FTG-modules",
|
||||||
|
"https://github.com/SekaiYoneya/modules",
|
||||||
|
"https://github.com/GeekTG/FTG-Modules",
|
||||||
|
"https://github.com/Den4ikSuperOstryyPer4ik/Astro-modules",
|
||||||
|
"https://github.com/vsecoder/hikka_modules",
|
||||||
|
"https://github.com/sqlmerr/hikka_mods",
|
||||||
|
"https://github.com/N3rcy/modules",
|
||||||
|
"https://github.com/KorenbZla/HikkaModules",
|
||||||
|
"https://github.com/MuRuLOSE/HikkaModulesRepo",
|
||||||
|
"https://github.com/coddrago/modules",
|
||||||
|
"https://github.com/1jpshiro/hikka-modules",
|
||||||
|
"https://github.com/MoriSummerz/ftg-mods",
|
||||||
|
"https://github.com/anon97945/hikka-mods",
|
||||||
|
"https://github.com/dorotorothequickend/DorotoroModules",
|
||||||
|
"https://github.com/AmoreForever/amoremods",
|
||||||
|
"https://github.com/idiotcoders/idiotmodules",
|
||||||
|
"https://github.com/CakesTwix/Hikka-Modules",
|
||||||
|
"https://github.com/archquise/H.Modules",
|
||||||
|
"https://github.com/GD-alt/mm-hikka-mods",
|
||||||
|
"https://github.com/HitaloSama/FTG-modules-repo",
|
||||||
|
"https://github.com/SekaiYoneya/Friendly-telegram",
|
||||||
|
"https://github.com/blazedzn/ftg-modules",
|
||||||
|
"https://github.com/hikariatama/ftg",
|
||||||
|
"https://github.com/m4xx1m/FTG",
|
||||||
|
"https://github.com/skillzmeow/skillzmods_hikka",
|
||||||
|
"https://github.com/fajox1/famods",
|
||||||
|
"https://github.com/unneyon/hikka-mods",
|
||||||
|
"https://github.com/TheKsenon/MyHikkaModules",
|
||||||
|
"https://github.com/cryptexctl/modules-mirror",
|
||||||
|
"https://github.com/Ruslan-Isaev/modules",
|
||||||
|
"https://github.com/shadowhikka/sh.modules",
|
||||||
|
"https://github.com/fiksofficial/python-modules",
|
||||||
|
"https://github.com/mead0wsss/mead0wsMods",
|
||||||
|
"https://github.com/SenkoGuardian/SenModules",
|
||||||
|
"https://github.com/ZetGoHack/nullmod",
|
||||||
|
"https://github.com/yummy1gay/limoka"
|
||||||
|
|
||||||
repos = parse_repos("repositories.json")
|
]
|
||||||
|
|
||||||
def configure_git():
|
def configure_git():
|
||||||
"""Configure Git to ignore file mode changes."""
|
"""Configure Git to ignore file mode changes."""
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -23,4 +23,3 @@ chatmodule
|
|||||||
stats
|
stats
|
||||||
tagwatcher
|
tagwatcher
|
||||||
hardspam
|
hardspam
|
||||||
YaMusic
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# meta developer: @codrago_m
|
# meta developer: @codrago_m
|
||||||
# scope: heroku_min 2.0.0
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from .. import utils, loader, main
|
from .. import utils, loader, main
|
||||||
@@ -114,8 +113,15 @@ class TagWatcher(loader.Module):
|
|||||||
validator=loader.validators.Boolean(),
|
validator=loader.validators.Boolean(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def client_ready(self):
|
async def client_ready(self):
|
||||||
self.asset_channel = self._db.get("heroku.forums", "channel_id", 0)
|
await self.request_join("@xdesai_modules", self.strings["request_join_reason"])
|
||||||
|
self.xdlib = await self.import_lib(
|
||||||
|
"https://raw.githubusercontent.com/xdesai96/modules/refs/heads/main/libs/xdlib.py",
|
||||||
|
suspend_on_error=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.asset_channel = self._db.get("legacy.forums", "channel_id", 0)
|
||||||
self._notif_topic = await utils.asset_forum_topic(
|
self._notif_topic = await utils.asset_forum_topic(
|
||||||
self._client,
|
self._client,
|
||||||
self._db,
|
self._db,
|
||||||
@@ -124,10 +130,6 @@ class TagWatcher(loader.Module):
|
|||||||
description="Here will be notifications about mentions in chats.",
|
description="Here will be notifications about mentions in chats.",
|
||||||
icon_emoji_id=5409025823388741707,
|
icon_emoji_id=5409025823388741707,
|
||||||
)
|
)
|
||||||
self.xdlib = await self.import_lib(
|
|
||||||
"https://raw.githubusercontent.com/coddrago/modules/refs/heads/main/libs/xdlib.py",
|
|
||||||
suspend_on_error=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
async def render_text(self, m):
|
async def render_text(self, m):
|
||||||
if self.config["custom_notif_text"]:
|
if self.config["custom_notif_text"]:
|
||||||
@@ -172,7 +174,7 @@ class TagWatcher(loader.Module):
|
|||||||
user_id=id,
|
user_id=id,
|
||||||
msg_content=msg_content,
|
msg_content=msg_content,
|
||||||
reply_content=reply_content,
|
reply_content=reply_content,
|
||||||
link=await m.link(),
|
link=await m.link,
|
||||||
)
|
)
|
||||||
|
|
||||||
@loader.command(
|
@loader.command(
|
||||||
|
|||||||
BIN
fajox1/famods/.DS_Store
vendored
Normal file
BIN
fajox1/famods/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
fajox1/famods/assets/.DS_Store
vendored
Normal file
BIN
fajox1/famods/assets/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
fajox1/famods/assets/banners/.DS_Store
vendored
Normal file
BIN
fajox1/famods/assets/banners/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
fajox1/famods/assets/birds/.DS_Store
vendored
Normal file
BIN
fajox1/famods/assets/birds/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, ai, assistant
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import aiohttp
|
import aiohttp
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, ai, username
|
|
||||||
# requires: aiohttp
|
# requires: aiohttp
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, user, profile
|
|
||||||
|
|
||||||
from hikkatl.types import Message
|
from hikkatl.types import Message
|
||||||
from telethon.tl.functions.account import UpdateProfileRequest
|
from telethon.tl.functions.account import UpdateProfileRequest
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, calculator, calc
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import math
|
import math
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
# На модуль распространяется лицензия "GNU General Public License v3.0
|
# На модуль распространяется лицензия "GNU General Public License v3.0"
|
||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @PyModule
|
# meta developer: @PyModule
|
||||||
# meta fhsdesc: tool, tools, channel, admintools, admin, admintool
|
|
||||||
from telethon.tl.types import Message
|
from telethon.tl.types import Message
|
||||||
from .. import loader
|
from .. import loader
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# meta fhsdesc: tool, tools, server, admin
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, fun, packs
|
|
||||||
# requires: opencv-python pillow
|
# requires: opencv-python pillow
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: fun, cute, message, love
|
|
||||||
|
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, phone, info
|
|
||||||
# requires: aiohttp cachetools
|
# requires: aiohttp cachetools
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
# scope: hikka_only
|
# scope: hikka_only
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, scanner, domain
|
|
||||||
# requires: python-whois dnspython requests
|
# requires: python-whois dnspython requests
|
||||||
|
|
||||||
import socket
|
import socket
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @PyModule
|
# meta developer: @PyModule
|
||||||
# meta fhsdesc: tool, tools, user, id
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
|
|
||||||
@loader.tds
|
@loader.tds
|
||||||
|
|||||||
@@ -11,459 +11,183 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, github, info, inline
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
from ..inline import InlineCall
|
|
||||||
import logging
|
import logging
|
||||||
import asyncio
|
|
||||||
import urllib.request
|
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
|
import urllib.request
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
@loader.tds
|
@loader.tds
|
||||||
class GitHubInfoMod(loader.Module):
|
class GitHubInfoMod(loader.Module):
|
||||||
"""GitHub user information"""
|
"""GitHub user info, recent activity and contribution graph"""
|
||||||
strings = {
|
strings = {
|
||||||
"name": "GitHubInfo",
|
"name": "GitHubInfo",
|
||||||
|
|
||||||
"no_username": "❗ Provide a GitHub username.",
|
"no_username": "❗ Provide a GitHub username.",
|
||||||
"user_not_found": "🚫 User not found: <b>{}</b>",
|
"user_not_found": "🚫 User not found: <b>{}</b>",
|
||||||
"api_error": "⚠ GitHub API error: <b>{msg}</b>",
|
"profile": "Profile",
|
||||||
"no_activity": "🕸 No recent activity from <b>{}</b>",
|
"no_activity": "🕸 No recent activity from <b>{}</b>",
|
||||||
"no_contrib": "📭 No contribution data.",
|
"no_contrib": "📭 No contribution data for <b>{}</b>",
|
||||||
"no_repos": "📭 No public repositories.",
|
"info_text": (
|
||||||
"no_orgs": "📭 Not a member of any organizations.",
|
"👤 <b>{name}</b> | <a href=\"{url}\">{profile}</a>\n"
|
||||||
"no_title": "No title",
|
"🏢 {company} | 📍 {location}\n"
|
||||||
"no_desc": "No description",
|
"📝 {bio}\n\n"
|
||||||
"not_specified": "Not specified",
|
"📦 Repos: <b>{repos}</b> | "
|
||||||
"more_commits": " ... and {} more\n",
|
"👥 Followers: <b>{followers}</b> | "
|
||||||
"hireable_yes": "Yes",
|
|
||||||
"hireable_no": "No",
|
|
||||||
|
|
||||||
"menu_text": "Choose a section:",
|
|
||||||
|
|
||||||
"btn_activity": "🔥 Activity",
|
|
||||||
"btn_contrib": "📊 Contributions",
|
|
||||||
"btn_repos": "📦 Repositories",
|
|
||||||
"btn_orgs": "🏛 Organizations",
|
|
||||||
"btn_back": "← Back to profile",
|
|
||||||
|
|
||||||
"profile_header": "<b>Profile</b> <a href=\"{url}\">{username}</a>\n\n",
|
|
||||||
"profile_text": (
|
|
||||||
"👤 Name: <b>{name}</b>\n"
|
|
||||||
"🏷 Login: <code>{login}</code>\n"
|
|
||||||
"📝 Bio: {bio}\n"
|
|
||||||
"🏢 Company: {company}\n"
|
|
||||||
"📍 Location: {location}\n"
|
|
||||||
"📧 Email: {email}\n"
|
|
||||||
"🔗 Website: {blog}\n"
|
|
||||||
"🐦 Twitter: {twitter}\n"
|
|
||||||
"💼 Hireable: {hireable}\n"
|
|
||||||
"📊 Type: {type}\n"
|
|
||||||
"📦 Public repos: <b>{repos}</b>\n"
|
|
||||||
"⭐ Public gists: <b>{gists}</b>\n"
|
|
||||||
"👥 Followers: <b>{followers}</b>\n"
|
|
||||||
"👣 Following: <b>{following}</b>\n"
|
"👣 Following: <b>{following}</b>\n"
|
||||||
"🕐 Created: <code>{created}</code>\n"
|
"🕒 Created: <code>{created}</code>"
|
||||||
"🕐 Updated: <code>{updated}</code>"
|
|
||||||
),
|
),
|
||||||
|
"activity_header": "<b>Recent activity:</b>\n",
|
||||||
"activity_header": "<b>Recent activity</b> <a href=\"https://github.com/{username}\">{username}</a>\n\n",
|
"activity_commit": "🔨 {count} commit(s) → <code>{branch}</code> in {repo}",
|
||||||
|
"activity_create": "✨ Created {ref_type} in {repo}",
|
||||||
"push_header": "🔨 Pushed to <code>{branch}</code> → <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"activity_pr": "🔄 {action} PR: {title}",
|
||||||
"push_no_commits": "🔨 Pushed (no details) to <code>{branch}</code> → <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"activity_issue": "❗ {action} issue: {title}",
|
||||||
"commit_line": "• <a href=\"{url}\"><code>{sha}</code></a>: {message}\n",
|
"activity_star": "⭐ Starred {repo}",
|
||||||
|
"activity_fork": "⑂ Forked to {fork}",
|
||||||
"create_branch": "✨ Created branch <code>{ref}</code> in <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"activity_other": "⚡ {event} in {repo}",
|
||||||
"create_tag": "✨ Created tag <code>{ref}</code> in <a href=\"https://github.com/{repo}/releases/tag/{ref}\">{repo}</a>\n",
|
"contrib_header": "<b>Contribution graph</b> for <a href=\"https://github.com/{username}\">{username}</a>:\n",
|
||||||
"create_repo": "✨ Created repository <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"contrib_footer": "⬛ = 0, 🟩 = 1+ contributions",
|
||||||
|
|
||||||
"pr_opened": "🔄 Opened PR <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
"pr_closed": "🔄 Closed PR <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
"pr_merged": "🔄 Merged PR <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
|
|
||||||
"issue_opened": "❗ Opened issue <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
"issue_closed": "❗ Closed issue <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
|
|
||||||
"star": "⭐ Starred <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
|
||||||
"fork": "⑂ Forked <a href=\"https://github.com/{fork}\">{fork}</a>\n",
|
|
||||||
|
|
||||||
"other": "⚡ {event} in <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
|
||||||
|
|
||||||
"repos_header": "<b>Top repositories by stars</b> <a href=\"https://github.com/{username}\">{username}</a>\n\n",
|
|
||||||
"repo_line": "⭐ <b>{stars}</b> | <a href=\"{url}\">{name}</a> — {desc}\nLanguage: {lang} | Forks: {forks}\n\n",
|
|
||||||
|
|
||||||
"orgs_header": "<b>Organizations</b> <a href=\"https://github.com/{username}\">{username}</a>\n\n",
|
|
||||||
"org_line": "• <a href=\"{url}\">{login}</a> — {desc}\n",
|
|
||||||
|
|
||||||
"contrib_header": "<b>Contribution graph (last year)</b> <a href=\"https://github.com/{username}\">{username}</a>\n",
|
|
||||||
"contrib_footer": "\n⬛ = 0, 🟩 = 1+ contributions",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strings_ru = {
|
strings_ru = {
|
||||||
"_cls_doc": "Информация о GitHub-пользователе",
|
"no_username": "❗ Укажи имя пользователя GitHub.",
|
||||||
|
|
||||||
"no_username": "❗ Укажи GitHub username.",
|
|
||||||
"user_not_found": "🚫 Пользователь не найден: <b>{}</b>",
|
"user_not_found": "🚫 Пользователь не найден: <b>{}</b>",
|
||||||
"api_error": "⚠ Ошибка GitHub API: <b>{msg}</b>",
|
"profile": "Профиль",
|
||||||
"no_activity": "🕸 Нет недавней активности у <b>{}</b>",
|
"no_activity": "🕸 Нет активности у <b>{}</b>",
|
||||||
"no_contrib": "📭 Нет данных о контрибуциях.",
|
"no_contrib": "📭 Нет данных о вкладах <b>{}</b>",
|
||||||
"no_repos": "📭 Нет публичных репозиториев.",
|
"info_text": (
|
||||||
"no_orgs": "📭 Не состоит в организациях.",
|
"👤 <b>{name}</b> | <a href=\"{url}\">{profile}</a>\n"
|
||||||
"no_title": "Без названия",
|
"🏢 {company} | 📍 {location}\n"
|
||||||
"no_desc": "Без описания",
|
"📝 {bio}\n\n"
|
||||||
"not_specified": "Не указано",
|
"📦 Репозитории: <b>{repos}</b> | "
|
||||||
"more_commits": " ... и ещё {}\n",
|
"👥 Подписчики: <b>{followers}</b> | "
|
||||||
"hireable_yes": "Да",
|
|
||||||
"hireable_no": "Нет",
|
|
||||||
|
|
||||||
"menu_text": "Выбери раздел:",
|
|
||||||
|
|
||||||
"btn_activity": "🔥 Активность",
|
|
||||||
"btn_contrib": "📊 Контрибы",
|
|
||||||
"btn_repos": "📦 Репозитории",
|
|
||||||
"btn_orgs": "🏛 Организации",
|
|
||||||
"btn_back": "← Назад к профилю",
|
|
||||||
|
|
||||||
"profile_header": "<b>Профиль</b> <a href=\"{url}\">{username}</a>\n\n",
|
|
||||||
"profile_text": (
|
|
||||||
"👤 Имя: <b>{name}</b>\n"
|
|
||||||
"🏷 Логин: <code>{login}</code>\n"
|
|
||||||
"📝 Био: {bio}\n"
|
|
||||||
"🏢 Компания: {company}\n"
|
|
||||||
"📍 Локация: {location}\n"
|
|
||||||
"📧 Email: {email}\n"
|
|
||||||
"🔗 Сайт: {blog}\n"
|
|
||||||
"🐦 Twitter: {twitter}\n"
|
|
||||||
"💼 Доступен для найма: {hireable}\n"
|
|
||||||
"📊 Тип аккаунта: {type}\n"
|
|
||||||
"📦 Публичные репозитории: <b>{repos}</b>\n"
|
|
||||||
"⭐ Публичные гисты: <b>{gists}</b>\n"
|
|
||||||
"👥 Подписчики: <b>{followers}</b>\n"
|
|
||||||
"👣 Подписки: <b>{following}</b>\n"
|
"👣 Подписки: <b>{following}</b>\n"
|
||||||
"🕐 Создан: <code>{created}</code>\n"
|
"🕒 Создан: <code>{created}</code>"
|
||||||
"🕐 Обновлён: <code>{updated}</code>"
|
|
||||||
),
|
),
|
||||||
|
"activity_header": "<b>Последняя активность:</b>\n",
|
||||||
"activity_header": "<b>Последняя активность</b> <a href=\"https://github.com/{username}\">{username}</a>\n\n",
|
"activity_commit": "🔨 {count} коммит(ов) → <code>{branch}</code> в {repo}",
|
||||||
|
"activity_create": "✨ Создан {ref_type} в {repo}",
|
||||||
"push_header": "🔨 Запушил в <code>{branch}</code> → <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"activity_pr": "🔄 {action} PR: {title}",
|
||||||
"push_no_commits": "🔨 Запушил (без деталей) в <code>{branch}</code> → <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"activity_issue": "❗ {action} issue: {title}",
|
||||||
"commit_line": "• <a href=\"{url}\"><code>{sha}</code></a>: {message}\n",
|
"activity_star": "⭐ В избранное {repo}",
|
||||||
|
"activity_fork": "⑂ Форк в {fork}",
|
||||||
"create_branch": "✨ Создал ветку <code>{ref}</code> в <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"activity_other": "⚡ {event} в {repo}",
|
||||||
"create_tag": "✨ Создал тег <code>{ref}</code> в <a href=\"https://github.com/{repo}/releases/tag/{ref}\">{repo}</a>\n",
|
"contrib_header": "<b>График активности</b> <a href=\"https://github.com/{username}\">{username}</a>:\n",
|
||||||
"create_repo": "✨ Создал репозиторий <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
"contrib_footer": "⬛ = 0, 🟩 = 1+ контрибуций",
|
||||||
|
|
||||||
"pr_opened": "🔄 Открыл PR <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
"pr_closed": "🔄 Закрыл PR <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
"pr_merged": "🔄 Замержил PR <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
|
|
||||||
"issue_opened": "❗ Открыл issue <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
"issue_closed": "❗ Закрыл issue <a href=\"{url}\">#{} {title}</a>\n",
|
|
||||||
|
|
||||||
"star": "⭐ Добавил в избранное <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
|
||||||
"fork": "⑂ Форкнул <a href=\"https://github.com/{fork}\">{fork}</a>\n",
|
|
||||||
|
|
||||||
"other": "⚡ {event} в <a href=\"https://github.com/{repo}\">{repo}</a>\n",
|
|
||||||
|
|
||||||
"repos_header": "<b>Топ репозитории по звёздам</b> <a href=\"https://github.com/{username}\">{username}</a>\n\n",
|
|
||||||
"repo_line": "⭐ <b>{stars}</b> | <a href=\"{url}\">{name}</a> — {desc}\nЯзык: {lang} | Форков: {forks}\n\n",
|
|
||||||
|
|
||||||
"orgs_header": "<b>Организации</b> <a href=\"https://github.com/{username}\">{username}</a>\n\n",
|
|
||||||
"org_line": "• <a href=\"{url}\">{login}</a> — {desc}\n",
|
|
||||||
|
|
||||||
"contrib_header": "<b>График контрибуций (последний год)</b> <a href=\"https://github.com/{username}\">{username}</a>\n",
|
|
||||||
"contrib_footer": "\n⬛ = 0, 🟩 = 1+ контрибуций",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.logger = logging.getLogger(__name__)
|
self.logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
async def github_fetch(self, url, github_api=True):
|
def github_api(self, url):
|
||||||
headers = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
|
|
||||||
"Accept": "application/vnd.github+json" if github_api else "application/json",
|
|
||||||
"X-GitHub-Api-Version": "2022-11-28",
|
|
||||||
}
|
|
||||||
req = urllib.request.Request(url, headers=headers)
|
|
||||||
try:
|
try:
|
||||||
with urllib.request.urlopen(req, timeout=15) as resp:
|
with urllib.request.urlopen(url) as resp:
|
||||||
raw = resp.read().decode("utf-8")
|
return json.loads(resp.read().decode())
|
||||||
return json.loads(raw) if raw else {}
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"[GitHub] {e}")
|
self.logger.warning(f"[GitHub API] {e}")
|
||||||
return {"message": str(e)}
|
return None
|
||||||
|
|
||||||
@loader.command(ru_doc="{username без @} — Информация о GitHub пользователе")
|
def get_username(self, message):
|
||||||
async def github(self, message):
|
args = message.text.split(maxsplit=1)
|
||||||
"""{username without @} — GitHub user information"""
|
return args[1] if len(args) > 1 else None
|
||||||
username = utils.get_args_raw(message)
|
|
||||||
|
@loader.command(doc="Show GitHub user info", ru_doc="Информация о пользователе GitHub")
|
||||||
|
async def gh(self, message):
|
||||||
|
"""Show GitHub user info"""
|
||||||
|
username = self.get_username(message)
|
||||||
if not username:
|
if not username:
|
||||||
await utils.answer(message, self.strings("no_username"))
|
return await message.edit(self.strings("no_username"))
|
||||||
return
|
|
||||||
|
|
||||||
user_data = await self.github_fetch(f"https://api.github.com/users/{username}")
|
data = self.github_api(f"https://api.github.com/users/{username}")
|
||||||
if "message" in user_data:
|
if not data:
|
||||||
await utils.answer(message, self.strings("user_not_found").format(username))
|
return await message.edit(self.strings("user_not_found").format(username))
|
||||||
return
|
|
||||||
|
|
||||||
hireable = self.strings("hireable_yes") if user_data.get("hireable") else self.strings("hireable_no")
|
await message.edit(self.strings("info_text").format(
|
||||||
|
name=data.get("name") or username,
|
||||||
|
url=data["html_url"],
|
||||||
|
profile=self.strings("profile"),
|
||||||
|
company=data.get("company", "N/A"),
|
||||||
|
location=data.get("location", "N/A"),
|
||||||
|
bio=data.get("bio", "No bio"),
|
||||||
|
repos=data.get("public_repos", 0),
|
||||||
|
followers=data.get("followers", 0),
|
||||||
|
following=data.get("following", 0),
|
||||||
|
created=data.get("created_at", "")[:10]
|
||||||
|
))
|
||||||
|
|
||||||
profile_text = (
|
@loader.command(doc="Show recent GitHub activity", ru_doc="Последняя активность GitHub")
|
||||||
self.strings("profile_header").format(url=user_data["html_url"], username=username)
|
async def gha(self, message):
|
||||||
+ self.strings("profile_text").format(
|
"""Show recent GitHub activity"""
|
||||||
name=user_data.get("name") or self.strings("not_specified"),
|
username = self.get_username(message)
|
||||||
login=username,
|
if not username:
|
||||||
bio=user_data.get("bio") or self.strings("no_desc"),
|
return await message.edit(self.strings("no_username"))
|
||||||
company=user_data.get("company") or self.strings("not_specified"),
|
|
||||||
location=user_data.get("location") or self.strings("not_specified"),
|
|
||||||
email=user_data.get("email") or self.strings("not_specified"),
|
|
||||||
blog=user_data.get("blog") or self.strings("not_specified"),
|
|
||||||
twitter=user_data.get("twitter_username") or self.strings("not_specified"),
|
|
||||||
hireable=hireable,
|
|
||||||
type=user_data.get("type", "User"),
|
|
||||||
repos=user_data.get("public_repos", 0),
|
|
||||||
gists=user_data.get("public_gists", 0),
|
|
||||||
followers=user_data.get("followers", 0),
|
|
||||||
following=user_data.get("following", 0),
|
|
||||||
created=user_data.get("created_at", "")[:10],
|
|
||||||
updated=user_data.get("updated_at", "")[:10],
|
|
||||||
)
|
|
||||||
+ "\n" + self.strings("menu_text")
|
|
||||||
)
|
|
||||||
|
|
||||||
await self.inline.form(
|
events = self.github_api(f"https://api.github.com/users/{username}/events?per_page=5")
|
||||||
message=message,
|
|
||||||
text=profile_text,
|
|
||||||
reply_markup=[
|
|
||||||
[{"text": self.strings("btn_activity"), "callback": self._activity, "args": (username,)}],
|
|
||||||
[{"text": self.strings("btn_contrib"), "callback": self._contrib, "args": (username,)}, {"text": self.strings("btn_repos"), "callback": self._repos, "args": (username,)}],
|
|
||||||
[{"text": self.strings("btn_orgs"), "callback": self._orgs, "args": (username,)}],
|
|
||||||
],
|
|
||||||
ttl=10 * 60,
|
|
||||||
)
|
|
||||||
|
|
||||||
async def _profile(self, call: InlineCall, username: str):
|
|
||||||
# Этот метод теперь используется только для возврата к профилю
|
|
||||||
data = await self.github_fetch(f"https://api.github.com/users/{username}")
|
|
||||||
if "message" in data:
|
|
||||||
await call.edit(self.strings("api_error").format(msg=data["message"]))
|
|
||||||
return
|
|
||||||
|
|
||||||
hireable = self.strings("hireable_yes") if data.get("hireable") else self.strings("hireable_no")
|
|
||||||
|
|
||||||
profile_text = (
|
|
||||||
self.strings("profile_header").format(url=data["html_url"], username=username)
|
|
||||||
+ self.strings("profile_text").format(
|
|
||||||
name=data.get("name") or self.strings("not_specified"),
|
|
||||||
login=username,
|
|
||||||
bio=data.get("bio") or self.strings("no_desc"),
|
|
||||||
company=data.get("company") or self.strings("not_specified"),
|
|
||||||
location=data.get("location") or self.strings("not_specified"),
|
|
||||||
email=data.get("email") or self.strings("not_specified"),
|
|
||||||
blog=data.get("blog") or self.strings("not_specified"),
|
|
||||||
twitter=data.get("twitter_username") or self.strings("not_specified"),
|
|
||||||
hireable=hireable,
|
|
||||||
type=data.get("type", "User"),
|
|
||||||
repos=data.get("public_repos", 0),
|
|
||||||
gists=data.get("public_gists", 0),
|
|
||||||
followers=data.get("followers", 0),
|
|
||||||
following=data.get("following", 0),
|
|
||||||
created=data.get("created_at", "")[:10],
|
|
||||||
updated=data.get("updated_at", "")[:10],
|
|
||||||
)
|
|
||||||
+ "\n" + self.strings("menu_text")
|
|
||||||
)
|
|
||||||
|
|
||||||
await call.edit(
|
|
||||||
text=profile_text,
|
|
||||||
reply_markup=[
|
|
||||||
[{"text": self.strings("btn_activity"), "callback": self._activity, "args": (username,)}],
|
|
||||||
[{"text": self.strings("btn_contrib"), "callback": self._contrib, "args": (username,)}, {"text": self.strings("btn_repos"), "callback": self._repos, "args": (username,)}],
|
|
||||||
[{"text": self.strings("btn_orgs"), "callback": self._orgs, "args": (username,)}],
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
async def _activity(self, call: InlineCall, username: str):
|
|
||||||
events = await self.github_fetch(f"https://api.github.com/users/{username}/events?per_page=40")
|
|
||||||
if "message" in events:
|
|
||||||
await call.edit(self.strings("api_error").format(msg=events["message"]), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
|
||||||
return
|
|
||||||
if not events:
|
if not events:
|
||||||
await call.edit(self.strings("no_activity").format(username=username), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
return await message.edit(self.strings("no_activity").format(username))
|
||||||
return
|
|
||||||
|
|
||||||
lines = [self.strings("activity_header").format(username=username)]
|
lines = []
|
||||||
seen_repos = set()
|
for event in events:
|
||||||
|
|
||||||
for event in events[:25]:
|
|
||||||
etype = event["type"]
|
etype = event["type"]
|
||||||
repo = event["repo"]["name"]
|
repo = event["repo"]["name"]
|
||||||
if repo in seen_repos and len(lines) > 20:
|
|
||||||
continue
|
|
||||||
|
|
||||||
payload = event.get("payload", {})
|
payload = event.get("payload", {})
|
||||||
|
|
||||||
if etype == "PushEvent":
|
if etype == "PushEvent":
|
||||||
branch = payload.get("ref", "refs/heads/main").replace("refs/heads/", "")
|
branch = re.sub(r"refs/heads/", "", payload.get("ref", "main"))
|
||||||
commits = payload.get("commits", [])
|
count = len(payload.get("commits", []))
|
||||||
|
lines.append(self.strings("activity_commit").format(count=count, branch=branch, repo=repo))
|
||||||
if commits:
|
|
||||||
lines.append(self.strings("push_header").format(branch=branch, repo=repo))
|
|
||||||
for commit in commits[:5]:
|
|
||||||
sha = commit["sha"][:7]
|
|
||||||
message = commit["message"].split("\n")[0][:100]
|
|
||||||
if len(commit["message"].split("\n")[0]) > 100:
|
|
||||||
message += "..."
|
|
||||||
url = f"https://github.com/{repo}/commit/{commit['sha']}"
|
|
||||||
lines.append(self.strings("commit_line").format(url=url, sha=sha, message=message))
|
|
||||||
if len(commits) > 5:
|
|
||||||
lines.append(self.strings("more_commits").format(len(commits)-5))
|
|
||||||
else:
|
|
||||||
lines.append(self.strings("push_no_commits").format(branch=branch, repo=repo))
|
|
||||||
|
|
||||||
seen_repos.add(repo)
|
|
||||||
|
|
||||||
elif etype == "CreateEvent":
|
elif etype == "CreateEvent":
|
||||||
ref_type = payload.get("ref_type")
|
lines.append(self.strings("activity_create").format(ref_type=payload.get("ref_type"), repo=repo))
|
||||||
ref = payload.get("ref") or ""
|
|
||||||
if ref_type == "branch":
|
|
||||||
lines.append(self.strings("create_branch").format(ref=ref, repo=repo))
|
|
||||||
elif ref_type == "tag":
|
|
||||||
lines.append(self.strings("create_tag").format(ref=ref, repo=repo))
|
|
||||||
elif ref_type == "repository":
|
|
||||||
lines.append(self.strings("create_repo").format(repo=repo))
|
|
||||||
|
|
||||||
elif etype == "PullRequestEvent":
|
elif etype == "PullRequestEvent":
|
||||||
pr = payload.get("pull_request", {})
|
pr = payload.get("pull_request", {})
|
||||||
number = pr.get("number", "?")
|
lines.append(self.strings("activity_pr").format(action=payload.get("action"), title=pr.get("title")))
|
||||||
title = pr.get("title") or self.strings("no_title")
|
|
||||||
url = pr.get("html_url") or f"https://github.com/{repo}"
|
|
||||||
action = payload.get("action")
|
|
||||||
if action == "closed" and pr.get("merged"):
|
|
||||||
lines.append(self.strings("pr_merged").format(url=url, number=number, title=title))
|
|
||||||
elif action == "opened":
|
|
||||||
lines.append(self.strings("pr_opened").format(url=url, number=number, title=title))
|
|
||||||
elif action == "closed":
|
|
||||||
lines.append(self.strings("pr_closed").format(url=url, number=number, title=title))
|
|
||||||
|
|
||||||
elif etype == "IssuesEvent":
|
elif etype == "IssuesEvent":
|
||||||
issue = payload.get("issue", {})
|
issue = payload.get("issue", {})
|
||||||
number = issue.get("number", "?")
|
lines.append(self.strings("activity_issue").format(action=payload.get("action"), title=issue.get("title")))
|
||||||
title = issue.get("title") or self.strings("no_title")
|
|
||||||
url = issue.get("html_url") or f"https://github.com/{repo}"
|
|
||||||
action = payload.get("action")
|
|
||||||
if action == "opened":
|
|
||||||
lines.append(self.strings("issue_opened").format(url=url, number=number, title=title))
|
|
||||||
elif action == "closed":
|
|
||||||
lines.append(self.strings("issue_closed").format(url=url, number=number, title=title))
|
|
||||||
|
|
||||||
elif etype == "WatchEvent":
|
elif etype == "WatchEvent":
|
||||||
lines.append(self.strings("star").format(repo=repo))
|
lines.append(self.strings("activity_star").format(repo=repo))
|
||||||
|
|
||||||
elif etype == "ForkEvent":
|
elif etype == "ForkEvent":
|
||||||
fork = payload.get("forkee", {}).get("full_name", "unknown")
|
lines.append(self.strings("activity_fork").format(fork=payload.get("forkee", {}).get("full_name")))
|
||||||
lines.append(self.strings("fork").format(fork=fork))
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
event_name = etype.replace("Event", "")
|
lines.append(self.strings("activity_other").format(event=etype, repo=repo))
|
||||||
lines.append(self.strings("other").format(event=event_name, repo=repo))
|
|
||||||
|
|
||||||
await call.edit(
|
await message.edit(self.strings("activity_header") + "\n".join(lines))
|
||||||
text="".join(lines),
|
|
||||||
reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]]
|
|
||||||
)
|
|
||||||
|
|
||||||
async def _repos(self, call: InlineCall, username: str):
|
@loader.command(doc="Show GitHub contribution graph", ru_doc="Показать график контрибов GitHub")
|
||||||
repos = await self.github_fetch(f"https://api.github.com/users/{username}/repos?sort=stars&per_page=10")
|
async def ghc(self, message):
|
||||||
if "message" in repos:
|
"""Show GitHub contribution graph"""
|
||||||
await call.edit(self.strings("api_error").format(msg=repos["message"]), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
username = self.get_username(message)
|
||||||
return
|
if not username:
|
||||||
if not repos:
|
return await message.edit(self.strings("no_username"))
|
||||||
await call.edit(self.strings("no_repos"), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
|
||||||
return
|
|
||||||
|
|
||||||
lines = [self.strings("repos_header").format(username=username)]
|
data = self.github_api(f"https://github-contributions-api.deno.dev/{username}.json")
|
||||||
for repo in repos[:10]:
|
contribs = data.get("contributions") if data else None
|
||||||
lines.append(self.strings("repo_line").format(
|
|
||||||
stars=repo.get("stargazers_count", 0),
|
|
||||||
url=repo["html_url"],
|
|
||||||
name=repo["name"],
|
|
||||||
desc=repo.get("description") or self.strings("no_desc"),
|
|
||||||
lang=repo.get("language") or self.strings("not_specified"),
|
|
||||||
forks=repo.get("forks_count", 0),
|
|
||||||
))
|
|
||||||
|
|
||||||
await call.edit(
|
if not isinstance(contribs, list):
|
||||||
text="".join(lines),
|
return await message.edit(self.strings("no_contrib").format(username))
|
||||||
reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]]
|
|
||||||
)
|
|
||||||
|
|
||||||
async def _orgs(self, call: InlineCall, username: str):
|
|
||||||
orgs = await self.github_fetch(f"https://api.github.com/users/{username}/orgs")
|
|
||||||
if "message" in orgs:
|
|
||||||
await call.edit(self.strings("api_error").format(msg=orgs["message"]), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
|
||||||
return
|
|
||||||
if not orgs:
|
|
||||||
await call.edit(self.strings("no_orgs"), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
|
||||||
return
|
|
||||||
|
|
||||||
lines = [self.strings("orgs_header").format(username=username)]
|
|
||||||
for org in orgs:
|
|
||||||
lines.append(self.strings("org_line").format(
|
|
||||||
url=f"https://github.com/{org['login']}",
|
|
||||||
login=org["login"],
|
|
||||||
desc=org.get("description") or self.strings("no_desc"),
|
|
||||||
))
|
|
||||||
|
|
||||||
await call.edit(
|
|
||||||
text="".join(lines),
|
|
||||||
reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]]
|
|
||||||
)
|
|
||||||
|
|
||||||
async def _contrib(self, call: InlineCall, username: str):
|
|
||||||
data = await self.github_fetch(f"https://github-contributions-api.deno.dev/{username}.json", github_api=False)
|
|
||||||
if not data or not data.get("contributions"):
|
|
||||||
await call.edit(self.strings("no_contrib"), reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]])
|
|
||||||
return
|
|
||||||
|
|
||||||
raw_days = []
|
|
||||||
for week in data.get("contributions", []):
|
|
||||||
if isinstance(week, list):
|
|
||||||
raw_days.extend([day for day in week if isinstance(day, dict)])
|
|
||||||
|
|
||||||
today = datetime.utcnow().date()
|
today = datetime.utcnow().date()
|
||||||
weeks_count = 53
|
start = today - timedelta(days=90)
|
||||||
days_back = weeks_count * 7 + 7
|
matrix = [["⬛" for _ in range(13)] for _ in range(7)]
|
||||||
start = today - timedelta(days=days_back)
|
|
||||||
|
|
||||||
matrix = [["⬛" for _ in range(weeks_count)] for _ in range(7)]
|
for entry in contribs:
|
||||||
|
|
||||||
for entry in raw_days:
|
|
||||||
date_str = entry.get("date")
|
|
||||||
if not date_str:
|
|
||||||
continue
|
|
||||||
try:
|
try:
|
||||||
date = datetime.strptime(date_str, "%Y-%m-%d").date()
|
date = datetime.strptime(entry["date"], "%Y-%m-%d").date()
|
||||||
if date < start or date > today:
|
if not (start <= date <= today):
|
||||||
continue
|
continue
|
||||||
count = entry.get("contributionCount") or entry.get("count", 0) or 0
|
day = (date.weekday() + 1) % 7 # Sunday=0
|
||||||
if count > 0:
|
week = (date - start).days // 7
|
||||||
day_idx = (date.weekday() + 1) % 7
|
if entry.get("contributionCount", 0) > 0:
|
||||||
week_idx = (date - start).days // 7
|
matrix[day][week] = "🟩"
|
||||||
if week_idx < weeks_count:
|
except:
|
||||||
matrix[day_idx][week_idx] = "🟩"
|
|
||||||
except Exception:
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
days_labels = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
|
days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
|
||||||
graph = "\n".join(f"{days_labels[i]} {''.join(matrix[i])}" for i in range(7))
|
graph = "\n".join(f"{days[i]} {''.join(matrix[i])}" for i in range(7))
|
||||||
|
|
||||||
await call.edit(
|
await message.edit(
|
||||||
text=self.strings("contrib_header").format(username=username)
|
self.strings("contrib_header").format(username=username)
|
||||||
+ f"<pre>{graph}</pre>"
|
+ f"<pre>{graph}</pre>\n"
|
||||||
+ self.strings("contrib_footer"),
|
+ self.strings("contrib_footer")
|
||||||
reply_markup=[[{"text": self.strings("btn_back"), "callback": self._profile, "args": (username,)}]]
|
|
||||||
)
|
)
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, auto, restart, heroku, hikka
|
|
||||||
|
|
||||||
from hikkatl.types import Message
|
from hikkatl.types import Message
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @PyModule
|
# meta developer: @PyModule
|
||||||
# meta fhsdesc: fun, rp, rpgame
|
|
||||||
# requires: toml
|
# requires: toml
|
||||||
import os
|
import os
|
||||||
from hikka import loader, utils
|
from hikka import loader, utils
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @PyModule
|
# meta developer: @PyModule
|
||||||
# meta fhsdesc: tool, tools, lyrics, music
|
|
||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup, Tag, NavigableString
|
from bs4 import BeautifulSoup, Tag, NavigableString
|
||||||
import re
|
import re
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, minecraft, game
|
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import base64
|
import base64
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, in heroku
|
|
||||||
# requires: asyncio
|
# requires: asyncio
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, point, auto
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, qr
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import requests
|
import requests
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
# scope: hikka_only
|
# scope: hikka_only
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, random
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import random
|
import random
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, test, speedtest
|
|
||||||
# requires: speedtest-cli
|
# requires: speedtest-cli
|
||||||
|
|
||||||
import speedtest
|
import speedtest
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, info, sysinfo, system
|
|
||||||
# requires: psutil
|
# requires: psutil
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
|
||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# meta fhsdesc: tool, tools, admin, tag, alltag, tagall
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
from telethon.tl.types import ChannelParticipantsAdmins, UserStatusRecently, UserStatusOnline, Message
|
from telethon.tl.types import ChannelParticipantsAdmins, UserStatusRecently, UserStatusOnline, Message
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
# Name: UserParser
|
# Name: UserParser
|
||||||
# Description: Данный модуль позволяет копировать ID, Username и Name участников чата при помощи команды .userpars
|
# Description: Данный модуль позволяет копировать ID, Username и Name участников чата при помощи команды .userpars
|
||||||
# meta developer: @PyModule
|
# meta developer: @PyModule
|
||||||
# meta fhsdesc: tool, tools, id, parser, userparser
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
import json
|
import json
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
# meta developer: @pymodule
|
# meta developer: @pymodule
|
||||||
# requires: aiohttp
|
# requires: aiohttp
|
||||||
# meta fhsdesc: tool, tools, wiki, wikipedia, info, wikiinfo
|
|
||||||
|
|
||||||
from .. import loader, utils
|
from .. import loader, utils
|
||||||
from ..inline.types import InlineQuery
|
from ..inline.types import InlineQuery
|
||||||
|
|||||||
105
modules.json
105
modules.json
@@ -16173,8 +16173,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@PyModule",
|
"developer": "@PyModule"
|
||||||
"fhsdesc": "tool, tools, lyrics, music"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16201,8 +16200,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, ai, username"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16229,8 +16227,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, random"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16257,8 +16254,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, ai, assistant"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16325,8 +16321,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, qr"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16353,8 +16348,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, minecraft, game"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16381,8 +16375,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, admin, tag, alltag, tagall"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16409,8 +16402,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, in heroku"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16437,8 +16429,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, user, profile"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16505,8 +16496,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@PyModule",
|
"developer": "@PyModule"
|
||||||
"fhsdesc": "tool, tools, id, parser, userparser"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16543,8 +16533,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, point, auto"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16581,8 +16570,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, calculator, calc"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16609,8 +16597,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@PyModule",
|
"developer": "@PyModule"
|
||||||
"fhsdesc": "tool, tools, channel, admintools, admin, admintool"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16667,8 +16654,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, phone, info"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16695,8 +16681,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@PyModule",
|
"developer": "@PyModule"
|
||||||
"fhsdesc": "fun, rp, rpgame"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16773,8 +16758,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, auto, restart, heroku, hikka"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16811,8 +16795,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, wiki, wikipedia, info, wikiinfo"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16839,8 +16822,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "fun, cute, message, love"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16877,8 +16859,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, info, sysinfo, system"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16905,8 +16886,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, fun, packs"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16942,8 +16922,7 @@
|
|||||||
"description": "Check host via check-host.net",
|
"description": "Check host via check-host.net",
|
||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null
|
||||||
"fhsdesc": "tool, tools, server, admin"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16970,8 +16949,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, scanner, domain"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -16994,24 +16972,43 @@
|
|||||||
},
|
},
|
||||||
"fiksofficial/python-modules/githubinfo.py": {
|
"fiksofficial/python-modules/githubinfo.py": {
|
||||||
"name": "GitHubInfoMod",
|
"name": "GitHubInfoMod",
|
||||||
"description": "GitHub user information",
|
"description": "GitHub user info, recent activity and contribution graph",
|
||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, github, info, inline"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
"github": "{username without @} — GitHub user information {username без @} — Информация о GitHub пользователе"
|
"gh": "Show GitHub user info Информация о пользователе GitHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gha": "Show recent GitHub activity Последняя активность GitHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ghc": "Show GitHub contribution graph Показать график контрибов GitHub"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"new_commands": [
|
"new_commands": [
|
||||||
{
|
{
|
||||||
"github": {
|
"gh": {
|
||||||
"ru_doc": "{username без @} — Информация о GitHub пользователе",
|
"ru_doc": "Информация о пользователе GitHub",
|
||||||
"en_doc": null,
|
"en_doc": null,
|
||||||
"doc": "{username without @} — GitHub user information"
|
"doc": "Show GitHub user info"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gha": {
|
||||||
|
"ru_doc": "Последняя активность GitHub",
|
||||||
|
"en_doc": null,
|
||||||
|
"doc": "Show recent GitHub activity"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ghc": {
|
||||||
|
"ru_doc": "Показать график контрибов GitHub",
|
||||||
|
"en_doc": null,
|
||||||
|
"doc": "Show GitHub contribution graph"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -17026,8 +17023,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@PyModule",
|
"developer": "@PyModule"
|
||||||
"fhsdesc": "tool, tools, user, id"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
@@ -17054,8 +17050,7 @@
|
|||||||
"meta": {
|
"meta": {
|
||||||
"pic": null,
|
"pic": null,
|
||||||
"banner": null,
|
"banner": null,
|
||||||
"developer": "@pymodule",
|
"developer": "@pymodule"
|
||||||
"fhsdesc": "tool, tools, test, speedtest"
|
|
||||||
},
|
},
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,192 +0,0 @@
|
|||||||
{
|
|
||||||
"repositories": [
|
|
||||||
{
|
|
||||||
"path": "DziruModules/hikkamods",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "kamolgks/Hikkamods",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "thomasmod/hikkamods",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "SkillsAngels/Modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "Sad0ff/modules-ftg",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "Yahikoro/Modules-for-FTG",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "KeyZenD/modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "AlpacaGang/ftg-modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "trololo65/Modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "Ijidishurka/modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "Fl1yd/FTG-Modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "D4n13l3k00/FTG-Modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "iamnalinor/FTG-modules",
|
|
||||||
"tags": ["hikkatrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "SekaiYoneya/modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "GeekTG/FTG-Modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "Den4ikSuperOstryyPer4ik/Astro-modules",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "vsecoder/hikka_modules",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "sqlmerr/hikka_mods",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "N3rcy/modules",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "KorenbZla/HikkaModules",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "MuRuLOSE/HikkaModulesRepo",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "coddrago/modules",
|
|
||||||
"tags": ["herokutrusted", "hikkatrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "1jpshiro/hikka-modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "MoriSummerz/ftg-mods",
|
|
||||||
"tags": ["hikkatrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "anon97945/hikka-mods",
|
|
||||||
"tags": ["hikkatrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "dorotorothequickend/DorotoroModules",
|
|
||||||
"tags": ["hikkatrusted", "nonlongermaintained"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "AmoreForever/amoremods",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "idiotcoders/idiotmodules",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "CakesTwix/Hikka-Modules",
|
|
||||||
"tags": ["hikkatrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "archquise/H.Modules",
|
|
||||||
"tags": ["hikkatrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "GD-alt/mm-hikka-mods",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "HitaloSama/FTG-modules-repo",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "SekaiYoneya/Friendly-telegram",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "blazedzn/ftg-modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "hikariatama/ftg",
|
|
||||||
"tags": ["hikkatrusted", "nonactive"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "m4xx1m/FTG",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "skillzmeow/skillzmods_hikka",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "fajox1/famods",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "TheKsenon/MyHikkaModules",
|
|
||||||
"tags": ["hikkatrusted", "herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "cryptexctl/modules-mirror",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "Ruslan-Isaev/modules",
|
|
||||||
"tags": ["herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "shadowhikka/sh.modules",
|
|
||||||
"tags": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "fiksofficial/python-modules",
|
|
||||||
"tags": ["herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "mead0wsss/mead0wsMods",
|
|
||||||
"tags": ["herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "SenkoGuardian/SenModules",
|
|
||||||
"tags": ["herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "ZetGoHack/nullmod",
|
|
||||||
"tags": ["herokutrusted"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "yummy1gay/limoka",
|
|
||||||
"tags": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
20
trusted.json
Normal file
20
trusted.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"trusted": [
|
||||||
|
"iamnalinor/FTG-modules",
|
||||||
|
"vsecoder/hikka_modules",
|
||||||
|
"sqlmerr/hikka_mods",
|
||||||
|
"N3rcy/modules",
|
||||||
|
"KorenbZla/HikkaModules",
|
||||||
|
"coddrago/modules",
|
||||||
|
"MoriSummerz/ftg-mods",
|
||||||
|
"anon97945/hikka-mods",
|
||||||
|
"dorotorothequickend/DorotoroModules",
|
||||||
|
"idiotcoders/idiotmodules",
|
||||||
|
"C0dwiz/H.Modules",
|
||||||
|
"GD-alt/mm-hikka-mods",
|
||||||
|
"hikariatama/ftg",
|
||||||
|
"fajox1/famods",
|
||||||
|
"TheKsenon/MyHikkaModules",
|
||||||
|
"Den4ikSuperOstryyPer4ik/Astro-modules"
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user