diff --git a/config_example.json b/config_example.json index 5803272..5080175 100644 --- a/config_example.json +++ b/config_example.json @@ -149,8 +149,7 @@ }, "reboot": { "permissions": [ - "admins", - "group_admins" + "owner" ], "modules": [ "general" @@ -201,6 +200,14 @@ "modules": [ "applications" ] + }, + "resetcommands": { + "permissions": [ + "owner" + ], + "modules": [ + "general" + ] } } } \ No newline at end of file diff --git a/holochecker.py b/holochecker.py index 46abed3..63bf2fc 100644 --- a/holochecker.py +++ b/holochecker.py @@ -19,6 +19,7 @@ from modules.commands.message import * from modules.commands.nearby import * from modules.commands.reapply import * from modules.commands.reboot import * +from modules.commands.resetcommands import * from modules.commands.rules import * from modules.commands.spoiler import * from modules.commands.sponsorship import * diff --git a/locale/uk.json b/locale/uk.json index 2ebc1a0..ab8091d 100644 --- a/locale/uk.json +++ b/locale/uk.json @@ -275,6 +275,7 @@ "nearby": "Показати користувачів поблизу", "reapply": "Повторно заповнити анкету", "reboot": "Перезапустити бота", + "resetcommands": "Відреєструвати всі команди", "rules": "Правила спільноти", "spoiler": "Почати створювати спойлер", "sponsorship": "Отримати роль за спонсорство", diff --git a/modules/commands/resetcommands.py b/modules/commands/resetcommands.py new file mode 100644 index 0000000..9ed0657 --- /dev/null +++ b/modules/commands/resetcommands.py @@ -0,0 +1,65 @@ +from app import app +from os import getpid, listdir +from pyrogram import filters +from pyrogram.types import Message, BotCommandScopeDefault, BotCommandScopeChat +from pyrogram.errors import bad_request_400 +from pyrogram.client import Client +from modules.utils import logWrite, should_quote, configGet +from modules import custom_filters + +pid = getpid() + +# Shutdown command ============================================================================================================= +@app.on_message(custom_filters.enabled_general & ~filters.scheduled & filters.private & filters.command(["resetcommands"], prefixes=["/"]) & custom_filters.admin) +async def cmd_kill(app: Client, msg: Message): + + if msg.from_user.id == configGet("owner"): + + logWrite(f"Resetting all commands on owner's request") + + valid_locales = [] + files_locales = listdir(f'{configGet("locale", "locations")}') + + for entry in files_locales: + if entry.endswith(".json"): + valid_locales.append(".".join(entry.split(".")[:-1])) + + if configGet("debug") is True: + logWrite(f'Resetting commands in groups {configGet("admin", "groups")} and {configGet("users", "groups")}') + await app.delete_bot_commands(scope=BotCommandScopeChat(chat_id=configGet("admin", "groups"))) + await app.delete_bot_commands(scope=BotCommandScopeChat(chat_id=configGet("users", "groups"))) + + for admin in configGet("admins"): + try: + if configGet("debug") is True: + logWrite(f'Resetting commands for admin {admin}') + await app.delete_bot_commands(scope=BotCommandScopeChat(chat_id=admin)) + except bad_request_400.PeerIdInvalid: + pass + + try: + if configGet("debug") is True: + logWrite(f'Resetting commands for owner {configGet("owner")}') + for lc in valid_locales: + if configGet("debug") is True: + logWrite(f'Resetting commands for owner {configGet("owner")} [{lc}]') + await app.delete_bot_commands(scope=BotCommandScopeChat(chat_id=configGet("owner")), language_code=lc) + await app.delete_bot_commands(scope=BotCommandScopeChat(chat_id=configGet("owner"))) + except bad_request_400.PeerIdInvalid: + pass + + for lc in valid_locales: + if configGet("debug") is True: + logWrite(f'Resetting commands for locale {lc}') + await app.delete_bot_commands(scope=BotCommandScopeDefault(), language_code=lc) + + if configGet("debug") is True: + logWrite(f'Resetting default commands') + await app.delete_bot_commands() + + await msg.reply_text("OK", quote=should_quote(msg)) + + if configGet("debug") is True: + logWrite(str(await app.get_bot_commands())) + logWrite(str(await app.get_bot_commands(scope=BotCommandScopeChat(chat_id=configGet("owner"))))) +# ============================================================================================================================== \ No newline at end of file