mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-17 23:04:17 +02:00
Added and updated repositories 2026-01-10 01:09:56
This commit is contained in:
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user