Added and updated repositories 2026-01-10 01:09:56

This commit is contained in:
github-actions[bot]
2026-01-10 01:09:56 +00:00
parent 1c99e02dd0
commit 572fb61011
67 changed files with 5294 additions and 1704 deletions

View File

@@ -26,14 +26,15 @@
# scope: InlineHelper 0.0.1
# ---------------------------------------------------------------------------------
import sys
import os
import asyncio
import logging
import shlex
import sys
from .. import loader, main, utils
from ..inline.types import InlineQuery
from .. import loader, utils, main
logger = logging.getLogger(__name__)
@loader.tds
@@ -42,77 +43,118 @@ class InlineHelperMod(loader.Module):
strings = {
"name": "InlineHelper",
"call_restart": "Restarting...",
"call_update": "Updating...",
"res_prefix": "Successfully reset prefix to default",
"restart_inline_handler_title": "Restart Userbot",
"call_restart": "<emoji document_id=5188311512791393083>🔄</emoji> Restarting...",
"call_update": "<emoji document_id=5188311512791393083>🔄</emoji> Updating...",
"res_prefix": "<emoji document_id=5854762571659218443>✅</emoji> Prefix successfully reset to default",
"restart_inline_handler_title": "🔄 Restart Userbot",
"restart_inline_handler_description": "Restart your userbot via inline",
"restart_inline_handler_message": "Press the button below to restart your userbot",
"restart_inline_handler_reply_text": "Restart",
"update_inline_handler_title": "Update Userbot",
"restart_inline_handler_message": "🔄 Restart",
"update_inline_handler_title": "🔄 Update Userbot",
"update_inline_handler_description": "Update your userbot via inline",
"update_inline_handler_message": "Press the button below to update your userbot",
"update_inline_handler_reply_text": "Update",
"terminal_inline_handler_title": "Command Executed!",
"update_inline_handler_message": "🔄 Update",
"terminal_inline_handler_title": "💻 Command Executed",
"terminal_inline_handler_description": "Command executed successfully",
"terminal_inline_handler_message": "Command {text} executed successfully in terminal",
"modules_inline_handler_title": "Modules",
"terminal_inline_handler_message": "Command <code>{text}</code> executed successfully in terminal",
"modules_inline_handler_title": "📦 Modules",
"modules_inline_handler_description": "List all installed modules",
"modules_inline_handler_result": "☘️ Installed modules:\n",
"resetprefix_inline_handler_title": "Reset Prefix",
"resetprefix_inline_handler_description": "Reset your prefix back to default",
"modules_inline_handler_result": "📦 All installed modules:\n\n",
"resetprefix_inline_handler_title": "⚠️ Reset Prefix",
"resetprefix_inline_handler_description": "Reset your prefix back to default (be careful!)",
"resetprefix_inline_handler_message": "Are you sure you want to reset your prefix to default dot?",
"resetprefix_inline_handler_reply_text_yes": "Yes",
"resetprefix_inline_handler_reply_text_no": "No",
"resetprefix_inline_handler_reply_text_yes": "Yes, reset it",
"resetprefix_inline_handler_reply_text_no": "No, cancel",
"error_no_module": "<emoji document_id=5854929766146118183>❌</emoji> Module not found: {module}",
"error_command_failed": "<emoji document_id=5854929766146118183>❌</emoji> Command execution failed: {error}",
"error_git_failed": "<emoji document_id=5854929766146118183>❌</emoji> Git operation failed: {error}",
}
strings_ru = {
"call_restart": "Перезагружаю...",
"call_update": "Обновляю...",
"res_prefix": "Префикс успешно сброшен по умолчанию",
"restart_inline_handler_title": "Перезагрузить юзербота",
"call_restart": "<emoji document_id=5188311512791393083>🔄</emoji> Перезагружаю...",
"call_update": "<emoji document_id=5188311512791393083>🔄</emoji> Обновляю...",
"res_prefix": "<emoji document_id=5854762571659218443>✅</emoji> Префикс успешно сброшен по умолчанию",
"restart_inline_handler_title": "<emoji document_id=5188311512791393083>🔄</emoji> Перезагрузить юзербота",
"restart_inline_handler_description": "Перезагрузить юзербота через инлайн",
"restart_inline_handler_message": "<b>Нажмите на кнопку ниже для рестарта юзербота</b>",
"restart_inline_handler_reply_text": "Перезапуск",
"update_inline_handler_title": "Обновить юзербота",
"restart_inline_handler_message": "<emoji document_id=5188311512791393083>🔄</emoji> Перезагрузка",
"update_inline_handler_title": "<emoji document_id=5188311512791393083>🔄</emoji> Обновить юзербота",
"update_inline_handler_description": "Обновить юзербота через инлайн",
"update_inline_handler_message": "<b>Нажмите на кнопку ниже для обновления юзербота</b>",
"update_inline_handler_reply_text": "Обновить",
"terminal_inline_handler_title": "Команда выполнена!",
"terminal_inline_handler_description": "Команда завершена.",
"update_inline_handler_message": "<emoji document_id=5188311512791393083>🔄</emoji> Обновить",
"terminal_inline_handler_title": "<emoji document_id=5854762571659218443>💻</emoji> Команда выполнена!",
"terminal_inline_handler_description": "Команда успешно выполнена.",
"terminal_inline_handler_message": "Команда <code>{text}</code> была успешно выполнена в терминале",
"modules_inline_handler_title": "Модули",
"modules_inline_handler_description": "Вывести список установленных моудей",
"modules_inline_handler_result": "☘️ Все установленные модули:\n",
"resetprefix_inline_handler_title": "Сбросить префикс",
"resetprefix_inline_handler_description": "Сбросить префикс по умолчанию",
"modules_inline_handler_title": "<emoji document_id=5854762571659218443>📦</emoji> Модули",
"modules_inline_handler_description": "Вывести список установленных модулей",
"modules_inline_handler_result": "<emoji document_id=5854762571659218443>📦</emoji> Все установленные модули:\n\n",
"resetprefix_inline_handler_title": "<emoji document_id=5854929766146118183>⚠️</emoji> Сбросить префикс",
"resetprefix_inline_handler_description": "Сбросить префикс по умолчанию (осторожно!)",
"resetprefix_inline_handler_message": "Вы действительно хотите сбросить ваш префикс и установить стандартную точку?",
"resetprefix_inline_handler_reply_text_yes": "Да",
"resetprefix_inline_handler_reply_text_no": "Нет",
"resetprefix_inline_handler_reply_text_yes": "Да, сбросить",
"resetprefix_inline_handler_reply_text_no": "Нет, отменить",
"error_no_module": "<emoji document_id=5854929766146118183>❌</emoji> Модуль не найден: {module}",
"error_command_failed": "<emoji document_id=5854929766146118183>❌</emoji> Ошибка выполнения команды: {error}",
"error_git_failed": "<emoji document_id=5854929766146118183>❌</emoji> Ошибка git операции: {error}",
}
def __init__(self):
self.client = None
self.db = None
self._base_dir = utils.get_base_dir()
async def client_ready(self, client, db):
self.client = client
self.db = db
async def restart(self, call):
"""Restart callback"""
logging.error("InlineHelper: restarting userbot...")
await call.edit(self.strings("call_restart"))
await sys.exit(0)
logger.info("InlineHelper: Restarting userbot...")
try:
await call.edit(self.strings["call_restart"])
await asyncio.create_subprocess_exec(
[
sys.executable,
"-c",
f"cd {self._base_dir} && git reset --hard HEAD && git pull",
],
cwd=self._base_dir,
)
await call.edit(self.strings["call_update"])
await asyncio.sleep(2)
await asyncio.create_subprocess_exec(
[sys.executable, "-c", f"cd {self._base_dir} && git pull"],
cwd=self._base_dir,
)
await call.edit(self.strings["res_prefix"])
except Exception as e:
logger.error(f"Restart failed: {e}")
await call.edit(self.strings["error_git_failed"].format(error=str(e)))
async def update(self, call):
"""Update callback"""
logging.error("InlineHelper: updating userbot...")
os.system(f"cd {utils.get_base_dir()} && cd .. && git reset --hard HEAD")
os.system("git pull")
await call.edit(self.strings("call_update"))
await sys.exit(0)
logger.info("InlineHelper: Updating userbot...")
try:
await call.edit(self.strings["call_update"])
await asyncio.create_subprocess_exec(
[
sys.executable,
"-c",
f"cd {self._base_dir} && git reset --hard HEAD && git pull",
],
cwd=self._base_dir,
)
await call.edit(self.strings["res_prefix"])
except Exception as e:
logger.error(f"Update failed: {e}")
await call.edit(self.strings["error_git_failed"].format(error=str(e)))
async def reset_prefix(self, call):
"""Reset prefix"""
self.db.set(main.__name__, "command_prefix", ".")
await call.edit(self.strings("res_prefix"))
"""Reset prefix callback"""
try:
self.db.set(main.__name__, "command_prefix", ".")
await call.edit(self.strings["res_prefix"])
except Exception as e:
logger.error(f"Reset prefix failed: {e}")
await call.edit(self.strings["error_command_failed"].format(error=str(e)))
@loader.inline_handler(
ru_doc="Перезагрузить юзербота",
@@ -152,42 +194,95 @@ class InlineHelperMod(loader.Module):
ru_doc="Выполнить команду в терминале (лучше сразу подготовить команду и просто вставить)",
en_doc="Execute the command in the terminal (it is better to prepare the command immediately and just paste it)",
)
async def terminal_inline_handler(self, _: InlineQuery):
text = _.args
async def terminal_inline_handler(self, query: InlineQuery):
"""Execute terminal command safely"""
if not query.args:
return {
"title": self.strings["terminal_inline_handler_title"],
"description": self.strings["terminal_inline_handler_description"],
"message": self.strings["terminal_inline_handler_message"].format(
text="No command provided"
),
}
await asyncio.create_subprocess_shell(
f"{text}",
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
cwd=utils.get_base_dir(),
)
command_text = query.args.strip()
if not command_text:
return {
"title": self.strings["terminal_inline_handler_title"],
"description": self.strings["terminal_inline_handler_description"],
"message": self.strings["terminal_inline_handler_message"].format(
text="No command provided"
),
}
return {
"title": self.strings("terminal_inline_handler_title"),
"description": self.strings("terminal_inline_handler_description"),
"message": self.strings("terminal_inline_handler_message").format(
text=text
),
}
if any(char in command_text for char in ["&", "|", ";", "`", "$"]):
return {
"title": self.strings["terminal_inline_handler_title"],
"description": self.strings["terminal_inline_handler_description"],
"message": self.strings["error_command_failed"].format(
error="Invalid characters in command"
),
}
try:
args = shlex.split(command_text)
process = await asyncio.create_subprocess_exec(
args,
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
cwd=self._base_dir,
text=True,
)
stdout, stderr = await process.communicate()
stdout.decode().strip() if stdout else ""
error = stderr.decode().strip() if stderr else ""
if error:
return {
"title": self.strings["terminal_inline_handler_title"],
"description": self.strings["terminal_inline_handler_description"],
"message": self.strings["error_command_failed"].format(error=error),
}
return {
"title": self.strings["terminal_inline_handler_title"],
"description": self.strings["terminal_inline_handler_description"],
"message": self.strings["terminal_inline_handler_message"].format(
text=command_text
),
}
except Exception as e:
return {
"title": self.strings["terminal_inline_handler_title"],
"description": self.strings["terminal_inline_handler_description"],
"message": self.strings["error_command_failed"].format(error=str(e)),
}
@loader.inline_handler(
ru_doc="Вывести список установленных модулей через инлайн",
en_doc="Display a list of installed modules via the inline",
)
async def modules_inline_handler(self, _: InlineQuery):
result = self.strings("modules_inline_handler_result")
async def modules_inline_handler(self, query: InlineQuery):
"""List all installed modules"""
try:
result = self.strings["modules_inline_handler_result"]
for mod in self.allmodules.modules:
try:
name = mod.strings["name"]
except KeyError:
name = mod.__clas__.__name__
result += f"{name}\n"
for mod in self.allmodules.modules:
try:
name = mod.strings["name"]
except KeyError:
name = mod.__class__.__name__
result += f"{name}\n"
except Exception as e:
logger.error(f"Error listing modules: {e}")
result = f"Error listing modules: {str(e)}"
return {
"title": self.strings("modules_inline_handler_title"),
"description": self.strings("modules_inline_handler_description"),
"title": self.strings["modules_inline_handler_title"],
"description": self.strings["modules_inline_handler_description"],
"message": result,
}