diff --git a/MuRuLOSE/HikkaModulesRepo/InviteManager.py b/MuRuLOSE/HikkaModulesRepo/InviteManager.py index 43ab0ea..0c0425a 100644 --- a/MuRuLOSE/HikkaModulesRepo/InviteManager.py +++ b/MuRuLOSE/HikkaModulesRepo/InviteManager.py @@ -35,6 +35,7 @@ class InviteManager(loader.Module): "no_args": " No arguments provided", "no_channel": " Please specify a channel or use in a channel", "created": " Invite link created: {link}", + "created_hidden": " Invite link created (hidden)", "select_action": "Select an action for the invite link: {link}", "revoked": " Invite link revoked", "select_expiry": "Select expiration period for the invite link: {link}", @@ -45,12 +46,28 @@ class InviteManager(loader.Module): "invalid_limit": " Invalid number for usage limit", "invalid_link": " Invalid invite link", "chat_required": " Please use this command in the target channel or specify the channel", + "failed_create": " Failed to create invite link", + "failed_revoke": " Failed to revoke link", + "failed_update_expiry": " Failed to update expiry", + "failed_update_limit": " Failed to update limit", + "close_btn": "Close", + "revoke_btn": "Revoke", + "set_expiry_btn": "Set Expiry", + "set_limit_btn": "Set Usage Limit", + "toggle_approval_btn": "Toggle Approval", + "cancel_btn": "Cancel", + "back_btn": "Back", + "approval_enabled": " Approval required enabled", + "approval_disabled": " Approval required disabled", + "enable_btn": "Enable", + "disable_btn": "Disable", } strings_ru = { "no_args": " Аргументы не указаны", "no_channel": " Укажите канал или используйте в канале", "created": " Ссылка-приглашение создана: {link}", + "created_hidden": " Ссылка-приглашение создана (скрыта)", "select_action": "Выберите действие для ссылки: {link}", "revoked": " Ссылка отозвана", "select_expiry": "Выберите период действия для ссылки: {link}", @@ -61,6 +78,21 @@ class InviteManager(loader.Module): "invalid_limit": " Неверное число для лимита", "invalid_link": " Неверная ссылка-приглашение", "chat_required": " Используйте команду в целевом канале или укажите канал", + "failed_create": " Не удалось создать ссылку-приглашение", + "failed_revoke": " Не удалось отозвать ссылку", + "failed_update_expiry": " Не удалось обновить дату истечения", + "failed_update_limit": " Не удалось обновить лимит", + "close_btn": "Закрыть", + "revoke_btn": "Отозвать", + "set_expiry_btn": "Установить срок", + "set_limit_btn": "Установить лимит", + "toggle_approval_btn": "Вкл/Выкл одобрение", + "cancel_btn": "Отмена", + "back_btn": "Назад", + "approval_enabled": " Вход по одобрению включён", + "approval_disabled": " Вход по одобрению отключён", + "enable_btn": "Включить", + "disable_btn": "Отключить", } async def client_ready(self, client, db): @@ -70,12 +102,20 @@ class InviteManager(loader.Module): @loader.command(ru_doc="Создать ссылку-приглашение для канала") async def createinvite(self, message: Message): """Create an invite link for a channel""" - args = utils.get_args_raw(message) + raw = utils.get_args_raw(message) or "" + parts = raw.split() + show_link = True chat = None - if args: + # support --hide or hide to avoid showing the link in response + if "--hide" in parts or "hide" in parts: + show_link = False + parts = [p for p in parts if p not in ("--hide", "hide")] + + if parts: + chat_arg = " ".join(parts) try: - chat = await self.client.get_entity(args) + chat = await self.client.get_entity(chat_arg) except Exception as e: logger.error(f"Failed to get entity: {e}") await utils.answer(message, self.strings["no_channel"]) @@ -97,10 +137,13 @@ class InviteManager(loader.Module): ) ) link = result.link - await utils.answer(message, self.strings["created"].format(link=link)) + if show_link: + await utils.answer(message, self.strings["created"].format(link=link)) + else: + await utils.answer(message, self.strings["created_hidden"]) except Exception as e: logger.error(f"Error creating invite: {e}") - await utils.answer(message, " Failed to create invite link") + await utils.answer(message, self.strings["failed_create"]) @loader.command(ru_doc="[ссылка] [канал] - Редактировать ссылку-приглашение через инлайн-кнопки") async def editinvite(self, message: Message): @@ -135,11 +178,15 @@ class InviteManager(loader.Module): text=self.strings["select_action"].format(link=link), reply_markup=[ [ - {"text": "Revoke", "callback": self._revoke_link, "args": (link, chat)}, - {"text": "Set Expiry", "callback": self._prompt_expiry, "args": (link, chat)}, + {"text": self.strings["revoke_btn"], "callback": self._revoke_link, "args": (link, chat)}, + {"text": self.strings["set_expiry_btn"], "callback": self._prompt_expiry, "args": (link, chat)}, ], [ - {"text": "Set Usage Limit", "callback": self._prompt_limit, "args": (link, chat)}, + {"text": self.strings["set_limit_btn"], "callback": self._prompt_limit, "args": (link, chat)}, + {"text": self.strings["toggle_approval_btn"], "callback": self._prompt_approval, "args": (link, chat)}, + ], + [ + {"text": self.strings["close_btn"], "action": "close"} ] ] ) @@ -158,13 +205,13 @@ class InviteManager(loader.Module): ) await call.edit( text=self.strings["revoked"], - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) except Exception as e: logger.error(f"Error revoking link: {e}") await call.edit( - text=" Failed to revoke link", - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + text=self.strings["failed_revoke"], + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) async def _prompt_expiry(self, call: InlineCall, link: str, chat): @@ -181,7 +228,10 @@ class InviteManager(loader.Module): ], [ {"text": "No Expiry", "callback": self._set_expiry, "args": (link, chat, None, None)}, - {"text": "Cancel", "callback": self._back_to_menu, "args": (link, chat)}, + {"text": self.strings["cancel_btn"], "callback": self._back_to_menu, "args": (link, chat)}, + ], + [ + {"text": self.strings["close_btn"], "action": "close"} ] ] ) @@ -203,7 +253,7 @@ class InviteManager(loader.Module): logger.error(f"Error calculating expiry: {e}") await call.edit( text=self.strings["invalid_date"], - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) return @@ -218,13 +268,13 @@ class InviteManager(loader.Module): expiry_text = expiry_date.strftime("%Y-%m-%d %H:%M") if expiry_date else "no expiry" await call.edit( text=self.strings["updated_expiry"].format(date=expiry_text), - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) except Exception as e: logger.error(f"Error setting expiry: {e}") await call.edit( - text=" Failed to update expiry", - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + text=self.strings["failed_update_expiry"], + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) async def _prompt_limit(self, call: InlineCall, link: str, chat): @@ -241,7 +291,10 @@ class InviteManager(loader.Module): ], [ {"text": "Unlimited", "callback": self._set_limit, "args": (link, chat, None)}, - {"text": "Cancel", "callback": self._back_to_menu, "args": (link, chat)}, + {"text": self.strings["cancel_btn"], "callback": self._back_to_menu, "args": (link, chat)}, + ], + [ + {"text": self.strings["close_btn"], "action": "close"} ] ] ) @@ -258,13 +311,13 @@ class InviteManager(loader.Module): limit_text = str(usage_limit) if usage_limit is not None else "unlimited" await call.edit( text=self.strings["updated_limit"].format(limit=limit_text), - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) except Exception as e: logger.error(f"Error setting limit: {e}") await call.edit( - text=" Failed to update limit", - reply_markup=[[{"text": "Back", "callback": self._back_to_menu, "args": (link, chat)}]] + text=self.strings["failed_update_limit"], + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] ) async def _back_to_menu(self, call: InlineCall, link: str, chat): @@ -272,11 +325,51 @@ class InviteManager(loader.Module): text=self.strings["select_action"].format(link=link), reply_markup=[ [ - {"text": "Revoke", "callback": self._revoke_link, "args": (link, chat)}, - {"text": "Set Expiry", "callback": self._prompt_expiry, "args": (link, chat)}, + {"text": self.strings["revoke_btn"], "callback": self._revoke_link, "args": (link, chat)}, + {"text": self.strings["set_expiry_btn"], "callback": self._prompt_expiry, "args": (link, chat)}, ], [ - {"text": "Set Usage Limit", "callback": self._prompt_limit, "args": (link, chat)}, + {"text": self.strings["set_limit_btn"], "callback": self._prompt_limit, "args": (link, chat)}, + {"text": self.strings["toggle_approval_btn"], "callback": self._prompt_approval, "args": (link, chat)}, + ], + [ + {"text": self.strings["close_btn"], "action": "close"} ] ] - ) \ No newline at end of file + ) + + async def _prompt_approval(self, call: InlineCall, link: str, chat): + await call.edit( + text=self.strings["select_action"].format(link=link), + reply_markup=[ + [ + {"text": self.strings.get("enable_btn", "Enable"), "callback": self._set_approval, "args": (link, chat, True)}, + {"text": self.strings.get("disable_btn", "Disable"), "callback": self._set_approval, "args": (link, chat, False)}, + ], + [ + {"text": self.strings["cancel_btn"], "callback": self._back_to_menu, "args": (link, chat)}, + {"text": self.strings["close_btn"], "action": "close"}, + ] + ] + ) + + async def _set_approval(self, call: InlineCall, link: str, chat, value: bool): + try: + await self.client( + EditExportedChatInviteRequest( + peer=chat, + link=link, + request_needed=value + ) + ) + text = self.strings["approval_enabled"] if value else self.strings["approval_disabled"] + await call.edit( + text=text, + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] + ) + except Exception as e: + logger.error(f"Error setting approval: {e}") + await call.edit( + text=self.strings["failed_update_limit"], + reply_markup=[[{"text": self.strings["back_btn"], "callback": self._back_to_menu, "args": (link, chat)}]] + ) \ No newline at end of file diff --git a/MuRuLOSE/HikkaModulesRepo/full.txt b/MuRuLOSE/HikkaModulesRepo/full.txt index 0efd0fd..2f74609 100644 --- a/MuRuLOSE/HikkaModulesRepo/full.txt +++ b/MuRuLOSE/HikkaModulesRepo/full.txt @@ -1,38 +1,33 @@ -SteamClient -MindGameCheat -AutoLeave -compliments autogiveawayjoin -HTTPCat -ReplaceWords -SearchersGenQuery -InviteManager -controlspam +AutoLeave +autoreader +BashWatcher ChannelCheck -InlineButtons -ToTHosting CheckTime +compliments +controlspam +CustomPing +filters +FindID +FuckJoins FuckTagOne +Genshin +HTTPCat +InlineButtons +K +MindGameCheat +morse +NasaImages PasswordUtils PinMoreChats -timer -RemoveLinks -SpyEVO -BashWatcher -youtubesearcher -YamiManager -VKMusic -FuckJoins -autoreader -Genshin -NasaImages RandomDog -Wynncraft -K -TempJoinChannel -filters -CustomPing -INumber -morse -YoutubeDL -FindID \ No newline at end of file +RemoveLinks +ReplaceWords +SearchersGenQuery +SpyEVO +SteamClient +timer +VKMusic +YamiManager +youtubesearcher +YouTubeDL \ No newline at end of file diff --git a/modules.json b/modules.json index c36c589..11f7496 100644 --- a/modules.json +++ b/modules.json @@ -1,7 +1,7 @@ { "Limoka.py": { "name": "Limoka", - "description": "Hikka modules are now in one place with easy searching!", + "description": "Modules are now in one place with easy searching!", "meta": { "pic": null, "banner": null, @@ -12,7 +12,7 @@ "limokacmd": "[query / nothing] - Search modules [запрос / ничего] — Поиск модулей" }, { - "lshistorycmd": "- Show search history — Показать историю поиска" + "lshistorycmd": "[clear] - Show or clear search history [clear] — Показать или очистить историю поиска" } ], "new_commands": [ @@ -25,9 +25,9 @@ }, { "lshistory": { - "ru_doc": "— Показать историю поиска", + "ru_doc": "[clear] — Показать или очистить историю поиска", "en_doc": null, - "doc": "- Show search history" + "doc": "[clear] - Show or clear search history" } } ],