mirror of https://github.com/coddrago/Heroku
2416 lines
107 KiB
Python
Executable File
2416 lines
107 KiB
Python
Executable File
# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
|
||
# █▀█ █ █ █ █▀█ █▀▄ █
|
||
# © Copyright 2022
|
||
# https://t.me/hikariatama
|
||
#
|
||
# 🔒 Licensed under the GNU AGPLv3
|
||
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
|
||
|
||
import logging
|
||
import atexit
|
||
import random
|
||
import sys
|
||
import os
|
||
|
||
import telethon
|
||
from telethon.tl.types import Message
|
||
from telethon.tl.functions.messages import (
|
||
GetDialogFiltersRequest,
|
||
UpdateDialogFilterRequest,
|
||
)
|
||
from telethon.tl.functions.channels import JoinChannelRequest
|
||
from telethon.utils import get_display_name
|
||
|
||
from .. import loader, main, utils
|
||
from ..inline.types import InlineCall
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
ALL_INVOKES = [
|
||
"clear_entity_cache",
|
||
"clear_fulluser_cache",
|
||
"clear_fullchannel_cache",
|
||
"clear_perms_cache",
|
||
"clear_cache",
|
||
"reload_core",
|
||
"inspect_cache",
|
||
"inspect_modules",
|
||
]
|
||
|
||
|
||
def restart(*argv):
|
||
os.execl(
|
||
sys.executable,
|
||
sys.executable,
|
||
"-m",
|
||
os.path.relpath(utils.get_base_dir()),
|
||
*argv,
|
||
)
|
||
|
||
|
||
@loader.tds
|
||
class HikkaSettingsMod(loader.Module):
|
||
"""Advanced settings for Hikka Userbot"""
|
||
|
||
strings = {
|
||
"name": "HikkaSettings",
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>Watchers:</b>\n\n<b>{}</b>"
|
||
),
|
||
"no_args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>No arguments"
|
||
" specified</b>"
|
||
),
|
||
"invoke404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Internal debug method"
|
||
" </b><code>{}</code><b> not found, ergo can't be invoked</b>"
|
||
),
|
||
"module404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Module</b>"
|
||
" <code>{}</code> <b>not found</b>"
|
||
),
|
||
"invoke": (
|
||
"<emoji document_id=5215519585150706301>👍</emoji> <b>Invoked internal debug"
|
||
" method </b><code>{}</code>\n\n<emoji"
|
||
" document_id=5784891605601225888>🔵</emoji> <b>Result:\n{}</b>"
|
||
),
|
||
"invoking": (
|
||
"<emoji document_id=5213452215527677338>⏳</emoji> <b>Invoking internal"
|
||
" debug method </b><code>{}</code><b> of </b><code>{}</code><b>...</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Watcher {} not"
|
||
" found</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Watcher {} is now"
|
||
" <u>disabled</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Watcher {} is now"
|
||
" <u>enabled</u></b>"
|
||
),
|
||
"args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>You need to specify"
|
||
" watcher name</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick for this user"
|
||
" is now {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Please, specify"
|
||
" command to toggle NoNick for</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick for"
|
||
" </b><code>{}</code><b> is now {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Command not found</b>"
|
||
),
|
||
"inline_settings": "⚙️ <b>Here you can configure your Hikka settings</b>",
|
||
"confirm_update": (
|
||
"🧭 <b>Please, confirm that you want to update. Your userbot will be"
|
||
" restarted</b>"
|
||
),
|
||
"confirm_restart": "🔄 <b>Please, confirm that you want to restart</b>",
|
||
"suggest_fs": "✅ Suggest FS for modules",
|
||
"do_not_suggest_fs": "🚫 Suggest FS for modules",
|
||
"use_fs": "✅ Always use FS for modules",
|
||
"do_not_use_fs": "🚫 Always use FS for modules",
|
||
"btn_restart": "🔄 Restart",
|
||
"btn_update": "🧭 Update",
|
||
"close_menu": "😌 Close menu",
|
||
"custom_emojis": "✅ Custom emojis",
|
||
"no_custom_emojis": "🚫 Custom emojis",
|
||
"suggest_subscribe": "✅ Suggest subscribe to channel",
|
||
"do_not_suggest_subscribe": "🚫 Suggest subscribe to channel",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>This command must be"
|
||
" executed in chat</b>"
|
||
),
|
||
"nonick_warning": (
|
||
"Warning! You enabled NoNick with default prefix! "
|
||
"You may get muted in Hikka chats. Change prefix or "
|
||
"disable NoNick!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Reply to a message"
|
||
" of user, which needs to be added to NoNick</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>This action will fully remove Hikka from this account and can't be"
|
||
" reverted!</b>\n\n<i>- Hikka chats will be removed\n- Session will be"
|
||
" terminated and removed\n- Hikka inline bot will be removed</i>"
|
||
),
|
||
"deauth_confirm_step2": (
|
||
"⚠️ <b>Are you really sure you want to delete Hikka?</b>"
|
||
),
|
||
"deauth_yes": "I'm sure",
|
||
"deauth_no_1": "I'm not sure",
|
||
"deauth_no_2": "I'm uncertain",
|
||
"deauth_no_3": "I'm struggling to answer",
|
||
"deauth_cancel": "🚫 Cancel",
|
||
"deauth_confirm_btn": "😢 Delete",
|
||
"uninstall": "😢 <b>Uninstalling Hikka...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka uninstalled. Web interface is still active, you can add another"
|
||
" account</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>Logs cleared</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick is enabled"
|
||
" for these commands:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick is enabled"
|
||
" for these users:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick is enabled"
|
||
" for these chats:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷♀️</emoji> <b>Nothing to"
|
||
" show...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>This command gives access to your Hikka web interface. It's not"
|
||
" recommended to run it in public group chats. Consider using it in <a"
|
||
" href='tg://openmessage?user_id={}'>Saved messages</a>. Type"
|
||
" </b><code>{}proxypass force_insecure</code><b> to ignore this warning</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>This command gives access to your Hikka web interface. It's not"
|
||
" recommended to run it in public group chats. Consider using it in <a"
|
||
" href='tg://openmessage?user_id={}'>Saved messages</a>.</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Opening tunnel to Hikka web interface...</b>",
|
||
"tunnel_opened": "🎉 <b>Tunnel opened. This link is valid for about 1 hour</b>",
|
||
"web_btn": "🌍 Web interface",
|
||
"btn_yes": "🚸 Open anyway",
|
||
"btn_no": "🔻 Cancel",
|
||
"lavhost_web": (
|
||
"✌️ <b>This link leads to your Hikka web interface on lavHost</b>\n\n<i>💡"
|
||
" You'll need to authorize using lavHost credentials, specified on"
|
||
" registration</i>"
|
||
),
|
||
"disable_stats": "✅ Anonymous stats allowed",
|
||
"enable_stats": "🚫 Anonymous stats disabled",
|
||
}
|
||
|
||
strings_ru = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>Смотрители:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Смотритель {} не"
|
||
" найден</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Смотритель {} теперь"
|
||
" <u>выключен</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Смотритель {} теперь"
|
||
" <u>включен</u></b>"
|
||
),
|
||
"args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Укажи имя"
|
||
" смотрителя</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Состояние NoNick для"
|
||
" этого пользователя: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Укажи команду, для"
|
||
" которой надо включить\\выключить NoNick</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Состояние NoNick для"
|
||
" </b><code>{}</code><b>: {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Команда не найдена</b>"
|
||
),
|
||
"inline_settings": "⚙️ <b>Здесь можно управлять настройками Hikka</b>",
|
||
"confirm_update": "🧭 <b>Подтвердите обновление. Юзербот будет перезагружен</b>",
|
||
"confirm_restart": "🔄 <b>Подтвердите перезагрузку</b>",
|
||
"suggest_fs": "✅ Предлагать сохранение модулей",
|
||
"do_not_suggest_fs": "🚫 Предлагать сохранение модулей",
|
||
"use_fs": "✅ Всегда сохранять модули",
|
||
"do_not_use_fs": "🚫 Всегда сохранять модули",
|
||
"btn_restart": "🔄 Перезагрузка",
|
||
"btn_update": "🧭 Обновление",
|
||
"close_menu": "😌 Закрыть меню",
|
||
"custom_emojis": "✅ Кастомные эмодзи",
|
||
"no_custom_emojis": "🚫 Кастомные эмодзи",
|
||
"suggest_subscribe": "✅ Предлагать подписку на канал",
|
||
"do_not_suggest_subscribe": "🚫 Предлагать подписку на канал",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Эту команду нужно"
|
||
" выполнять в чате</b>"
|
||
),
|
||
"_cls_doc": "Дополнительные настройки Hikka",
|
||
"nonick_warning": (
|
||
"Внимание! Ты включил NoNick со стандартным префиксом! "
|
||
"Тебя могут замьютить в чатах Hikka. Измени префикс или "
|
||
"отключи глобальный NoNick!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Ответь на сообщение"
|
||
" пользователя, для которого нужно включить NoNick</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>Это действие полностью удалит Hikka с этого аккаунта! Его нельзя"
|
||
" отменить</b>\n\n<i>- Все чаты, связанные с Hikka будут удалены\n- Сессия"
|
||
" Hikka будет сброшена\n- Инлайн бот Hikka будет удален</i>"
|
||
),
|
||
"deauth_confirm_step2": "⚠️ <b>Ты точно уверен, что хочешь удалить Hikka?</b>",
|
||
"deauth_yes": "Я уверен",
|
||
"deauth_no_1": "Я не уверен",
|
||
"deauth_no_2": "Не точно",
|
||
"deauth_no_3": "Нет",
|
||
"deauth_cancel": "🚫 Отмена",
|
||
"deauth_confirm_btn": "😢 Удалить",
|
||
"uninstall": "😢 <b>Удаляю Hikka...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka удалена. Веб-интерфейс все еще активен, можно добавить другие"
|
||
" аккаунты!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>Логи очищены</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick включен для"
|
||
" этих команд:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick включен для"
|
||
" этих пользователей:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick включен для"
|
||
" этих чатов:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷♀️</emoji> <b>Нечего"
|
||
" показывать...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>Эта команда дает доступ к веб-интерфейсу Hikka. Ее выполнение в"
|
||
" публичных чатах является угрозой безопасности. Предпочтительно выполнять"
|
||
" ее в <a href='tg://openmessage?user_id={}'>Избранных сообщениях</a>."
|
||
" Выполни </b><code>{}proxypass force_insecure</code><b> чтобы отключить"
|
||
" это предупреждение</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>Эта команда дает доступ к веб-интерфейсу Hikka. Ее выполнение в"
|
||
" публичных чатах является угрозой безопасности. Предпочтительно выполнять"
|
||
" ее в <a href='tg://openmessage?user_id={}'>Избранных сообщениях</a>.</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Открываю тоннель к веб-интерфейсу Hikka...</b>",
|
||
"tunnel_opened": (
|
||
"🎉 <b>Тоннель открыт. Эта ссылка будет активна не более часа</b>"
|
||
),
|
||
"web_btn": "🌍 Веб-интерфейс",
|
||
"btn_yes": "🚸 Все равно открыть",
|
||
"btn_no": "🔻 Закрыть",
|
||
"lavhost_web": (
|
||
"✌️ <b>По этой ссылке ты попадешь в веб-интерфейс Hikka на"
|
||
" lavHost</b>\n\n<i>💡 Тебе нужно будет авторизоваться, используя данные,"
|
||
" указанные при настройке lavHost</i>"
|
||
),
|
||
"disable_stats": "✅ Анонимная стата разрешена",
|
||
"enable_stats": "🚫 Анонимная стата запрещена",
|
||
}
|
||
|
||
strings_de = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>Beobachter:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Beobachter {} nicht"
|
||
"gefunden</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Watcher {} ist jetzt"
|
||
" <u>aus</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Watcher {} ist jetzt"
|
||
" <u>aktiviert</u></b>"
|
||
),
|
||
"arg": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Bitte geben Sie einen"
|
||
" Namen einHausmeister</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick-Status für"
|
||
" dieser Benutzer: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Geben Sie einen Befehl"
|
||
" anwas NoNick aktivieren/\\deaktivieren sollte</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick-Status für"
|
||
" </b><code>{}</code><b>: {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Befehl nicht"
|
||
" gefunden</b>"
|
||
),
|
||
"inline_settings": (
|
||
"⚙️ <b>Hier können Sie Ihre Hikka-Einstellungen verwalten</b>"
|
||
),
|
||
"confirm_update": (
|
||
"🧭 <b>Bestätige das Update. Der Userbot wird neu gestartet</b>"
|
||
),
|
||
"confirm_restart": "🔄 <b>Neustart bestätigen</b>",
|
||
"suggest_fs": "✅ Speichermodule vorschlagen",
|
||
"do_not_suggest_fs": "🚫 Speichermodule vorschlagen",
|
||
"use_fs": "✅ Module immer speichern",
|
||
"do_not_use_fs": "🚫 Module immer speichern",
|
||
"btn_restart": "🔄 Neustart",
|
||
"btn_update": "🧭 Aktualisieren",
|
||
"close_menu": "😌 Menü schließen",
|
||
"custom_emojis": "✅ Benutzerdefinierte Emojis",
|
||
"no_custom_emojis": "🚫 Benutzerdefinierte Emojis",
|
||
"suggest_subscribe": "✅ Kanalabonnement vorschlagen",
|
||
"do_not_suggest_subscribe": "🚫 Kanalabonnement vorschlagen",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Dieser Befehl benötigt"
|
||
"im Chat ausführen</b>"
|
||
),
|
||
"_cls_doc": "Erweiterte Hikka-Einstellungen",
|
||
"nonick_warning": (
|
||
"Achtung! Sie haben NoNick mit dem Standard-Präfix eingefügt!Sie sind"
|
||
" möglicherweise in Hikka-Chats stummgeschaltet. Ändern Sie das Präfix oder"
|
||
" schalten Sie das globale NoNick aus!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Auf Nachricht"
|
||
" antwortenBenutzer soll NoNick aktivieren</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>Diese Aktion wird Hikka vollständig von diesem Konto entfernen! Er"
|
||
" kann nichtAbbrechen</b>\n\n<i>- Alle Hikka-bezogenen Chats werden"
|
||
" gelöscht\n- SitzungHikka wird zurückgesetzt\n- Hikkas Inline-Bot wird"
|
||
" gelöscht</i>"
|
||
),
|
||
"deauth_confirm_step2": (
|
||
"⚠️ <b>Sind Sie sicher, dass Sie Hikka deinstallieren möchten?</b>"
|
||
),
|
||
"deauth_yes": "Ich bin sicher",
|
||
"deauth_no_1": "Ich bin mir nicht sicher",
|
||
"deauth_no_2": "Nicht sicher",
|
||
"deauth_no_3": "Nein",
|
||
"deauth_cancel": "🚫 Abbrechen",
|
||
"deauth_confirm_btn": "😢 Löschen",
|
||
"uninstall": "😢 <b>Hikka wird deinstalliert...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka wurde entfernt. Die Weboberfläche ist noch aktiv, andere können"
|
||
" hinzugefügt werdenKonten!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>Protokolle gelöscht</b>",
|
||
"cmd_nn_liste": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick aktiviert für"
|
||
" diese Befehle:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick aktiviert für"
|
||
" diese Benutzer:</b>\n\n{}"
|
||
),
|
||
"chat_nn_liste": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick aktiviert für"
|
||
" diese Chats:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷♀️</emoji> <b>Nichtszeigen...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>Dieser Befehl ermöglicht den Zugriff auf die Hikka-Weboberfläche."
|
||
" Seine Ausführung inÖffentliche Chats sind ein Sicherheitsrisiko. Am"
|
||
" besten durchführen es in <a href='tg://openmessage?user_id={}'>Empfohlene"
|
||
" Nachrichten</a>.Führen Sie </b><code>{}proxypass force_insecure</code><b>"
|
||
" zum Deaktivieren ausDies ist eine Warnung</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>Dieser Befehl ermöglicht den Zugriff auf die Hikka-Weboberfläche."
|
||
" Seine Ausführung inÖffentliche Chats sind ein Sicherheitsrisiko. Am"
|
||
" besten durchführen sie in <a"
|
||
" href='tg://openmessage?user_id={}'>Empfohlene Nachrichten</a>.</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Öffne einen Tunnel zur Hikka-Weboberfläche...</b>",
|
||
"tunnel_opened": (
|
||
"🎉 <b>Der Tunnel ist offen. Dieser Link ist nicht länger als eine Stunde"
|
||
" aktiv</b>"
|
||
),
|
||
"web_btn": "🌍 Webinterface",
|
||
"btn_yes": "🚸 Trotzdem geöffnet",
|
||
"btn_no": "🔻Schließen",
|
||
"lavhost_web": (
|
||
"✌️ <b>Dieser Link führt Sie zur Hikka-Weboberfläche auf"
|
||
" lavHost</b>\n\n<i>💡 Sie müssen sich mit Ihren Zugangsdaten anmelden,"
|
||
"beim Setzen von lavHost angegeben</i>"
|
||
),
|
||
"disable_stats": "✅ Anonyme Statistiken sind erlaubt",
|
||
"enable_stats": "🚫 Anonyme Statistiken deaktiviert",
|
||
}
|
||
|
||
strings_tr = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>İzleyiciler:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>İzleyici {} değil"
|
||
" bulundu</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>İzleyici {} şimdi"
|
||
" <u>kapalı</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>İzleyici {} şimdi"
|
||
" <u>etkin</u></b>"
|
||
),
|
||
"arg": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Lütfen bir ad girin"
|
||
"bekçi</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick durumu için"
|
||
" bu kullanıcı: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Bir komut belirtin"
|
||
"hangisi NoNick'i etkinleştirmeli/\\devre dışı bırakmalıdır</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick durumu için"
|
||
" </b><code>{}</code><b>: {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Komut bulunamadı</b>"
|
||
),
|
||
"inline_settings": "⚙️ <b>Buradan Hikka ayarlarınızı yönetebilirsiniz</b>",
|
||
"confirm_update": (
|
||
"🧭 <b>Güncellemeyi onaylayın. Kullanıcı robotu yeniden başlatılacak</b>"
|
||
),
|
||
"confirm_restart": "🔄 <b>Yeniden başlatmayı onayla</b>",
|
||
"suggest_fs": "✅ Kaydetme modülleri öner",
|
||
"do_not_suggest_fs": "🚫 Modüllerin kaydedilmesini öner",
|
||
"use_fs": "✅ Modülleri her zaman kaydet",
|
||
"do_not_use_fs": "🚫 Modülleri her zaman kaydet",
|
||
"btn_restart": "🔄 Yeniden Başlat",
|
||
"btn_update": "🧭 Güncelle",
|
||
"close_menu": "😌 Menüyü kapat",
|
||
"custom_emojis": "✅ Özel emojiler",
|
||
"no_custom_emojis": "🚫 Özel Emojiler",
|
||
"suggest_subscribe": "✅ Kanal aboneliği öner",
|
||
"do_not_suggest_subscribe": "🚫 Kanal aboneliği öner",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Bu komut gerekiyor"
|
||
" sohbette yürüt</b>"
|
||
),
|
||
"_cls_doc": "Gelişmiş Hikka Ayarları",
|
||
"nonick_warning": (
|
||
"Dikkat! NoNick'i standart önekle eklediniz!"
|
||
"Hikka sohbetlerinde sesiniz kapatılmış olabilir. Ön eki değiştirin veya "
|
||
"küresel NoNick'i kapatın!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Mesajı yanıtla"
|
||
"NoNick'i etkinleştirmek için kullanıcı</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>Bu işlem Hikka'yı bu hesaptan tamamen kaldıracak! Yapamaz"
|
||
"iptal</b>\n\n<i>- Hikka ile ilgili tüm sohbetler silinecek\n- Oturum"
|
||
" Hikka sıfırlanacak\n- Hikka'nın satır içi botu silinecek</i>"
|
||
),
|
||
"deauth_confirm_step2": (
|
||
"⚠️ <b>Hikka'yı kaldırmak istediğinizden emin misiniz?</b>"
|
||
),
|
||
"deauth_yes": "Eminim",
|
||
"deauth_no_1": "Emin değilim",
|
||
"deauth_no_2": "Emin değilim",
|
||
"deauth_no_3": "Hayır",
|
||
"deauth_cancel": "🚫 İptal",
|
||
"deauth_confirm_btn": "😢 Sil",
|
||
"uninstall": "😢 <b>Hikka'yı Kaldırılıyor...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka kaldırıldı. Web arayüzü hala aktif, başkaları eklenebilir"
|
||
"hesaplar!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>Günlükler temizlendi</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick için"
|
||
" etkinleştirildi bu komutlar:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick için"
|
||
" etkinleştirildi bu kullanıcılar:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick için"
|
||
" etkinleştirildi bu sohbetler:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷♀️</emoji> <b>Hiçbir şey"
|
||
"göster...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>Bu komut, Hikka web arayüzüne erişim sağlar. YürütülmesiGenel"
|
||
" sohbetler bir güvenlik riskidir. Tercihen gerçekleştirin <a"
|
||
" href='tg://openmessage?user_id={}'>Öne Çıkan Mesajlar</a> içinde.Devre"
|
||
" dışı bırakmak için </b><code>{}proxypass force_insecure</code><b>"
|
||
" çalıştırınbu bir uyarıdır</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>Bu komut, Hikka web arayüzüne erişim sağlar. Yürütülmesi"
|
||
"Genel sohbetler bir güvenlik riskidir. Tercihen gerçekleştirin"
|
||
" onu <a href='tg://openmessage?user_id={}'>Öne Çıkan Mesajlar</a>'da.</b>"
|
||
),
|
||
}
|
||
|
||
strings_uz = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>Kuzatuvchilar:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Kuzuvchi {} emas"
|
||
" topildi</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Kuzatuvchi {} hozir"
|
||
" <u>o'chirilgan</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>Kuzatuvchi {} hozir"
|
||
" <u>yoqilgan</u></b>"
|
||
),
|
||
"args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Iltimos, nom kiriting"
|
||
"qorovul</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick holati uchun"
|
||
" bu foydalanuvchi: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Buyruqni belgilang"
|
||
"bu NoNick</b>ni yoqish/o'chirish kerak"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick holati uchun"
|
||
" </b><code>{}</code><b>: {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Buyruq topilmadi</b>"
|
||
),
|
||
"inline_settings": (
|
||
"⚙️ <b>Bu yerda siz Hikka sozlamalaringizni boshqarishingiz mumkin</b>"
|
||
),
|
||
"confirm_update": (
|
||
"🧭 <b>Yangilanishni tasdiqlang. Userbot qayta ishga tushiriladi</b>"
|
||
),
|
||
"confirm_restart": "🔄 <b>Qayta ishga tushirishni tasdiqlang</b>",
|
||
"suggest_fs": "✅ Modullarni saqlashni taklif qilish",
|
||
"do_not_suggest_fs": "🚫 Modullarni saqlashni taklif qilish",
|
||
"use_fs": "✅ Modullarni doimo saqlash",
|
||
"do_not_use_fs": "🚫 Har doim modullarni saqlang",
|
||
"btn_restart": "🔄 Qayta ishga tushirish",
|
||
"btn_update": "🧭 Yangilash",
|
||
"close_menu": "😌 Menyuni yopish",
|
||
"custom_emojis": "✅ Maxsus emojilar",
|
||
"no_custom_emojis": "🚫 Maxsus kulgichlar",
|
||
"suggest_subscribe": "✅ Kanalga obuna bo'lishni taklif qilish",
|
||
"do_not_suggest_subscribe": "🚫 Kanalga obuna bo'lishni taklif qilish",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Bu buyruq kerak"
|
||
" chatda bajarish</b>"
|
||
),
|
||
"_cls_doc": "Kengaytirilgan Hikka sozlamalari",
|
||
"nonick_warning": (
|
||
"Diqqat! NoNickni standart prefiks bilan kiritdingiz!Hikka chatlarida"
|
||
" ovozingiz o'chirilgan bo'lishi mumkin. Prefiksni o'zgartiring yoki global"
|
||
" NoNickni o'chiring!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Xatga javob berish"
|
||
"foydalanuvchi NoNick</b>ni yoqish uchun"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>Bu amal Hikkani ushbu hisobdan butunlay olib tashlaydi! U qila"
|
||
" olmaydiBekor qilish</b>\n\n<i>- Hikka bilan bog'liq barcha chatlar"
|
||
" o'chiriladi\n- Sessiya Hikka qayta tiklanadi\n- Hikkaning ichki boti"
|
||
" o'chiriladi</i>"
|
||
),
|
||
"deauth_confirm_step2": (
|
||
"⚠️ <b>Haqiqatan ham Hikkani oʻchirib tashlamoqchimisiz?</b>"
|
||
),
|
||
"deauth_yes": "Ishonchim komil",
|
||
"deauth_no_1": "Imonim yo'q",
|
||
"deauth_no_2": "Ishonasiz",
|
||
"deauth_no_3": "Yo'q",
|
||
"deauth_cancel": "🚫 Bekor qilish",
|
||
"deauth_confirm_btn": "😢 O'chirish",
|
||
"uninstall": "😢 <b>Hikka o'chirilmoqda...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka oʻchirildi. Veb-interfeys hali ham faol, boshqalarni qoʻshish"
|
||
" mumkinhisoblar!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>Jurnallar tozalandi</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick yoqilgan"
|
||
" bu buyruqlar:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick yoqilgan"
|
||
" bu foydalanuvchilar:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick yoqilgan"
|
||
" bu chatlar:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷♀️</emoji> <b>Hech narsa"
|
||
"ko'rsatish...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>Ushbu buyruq Hikka veb-interfeysiga kirish imkonini beradi. Uning"
|
||
" bajarilishiOmmaviy chatlar xavfsizlikka xavf tug'diradi. Afzal bajaring"
|
||
" Bu <a href='tg://openmessage?user_id={}'>Taniqli xabarlar</a>da.O'chirish"
|
||
" uchun </b><code>{}proxypass force_insecure</code><b>ni ishga tushiring bu"
|
||
" ogohlantirish</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>Ushbu buyruq Hikka veb-interfeysiga kirish imkonini beradi. Uning"
|
||
" bajarilishiOmmaviy chatlar xavfsizlikka xavf tug'diradi. Afzal bajaring u"
|
||
" <a href='tg://openmessage?user_id={}'>Mazkur xabarlarda</a>.</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Hikka veb-interfeysiga tunnel ochilmoqda...</b>",
|
||
"tunnel_opened": (
|
||
"🎉 <b>Tunnel ochiq. Bu havola bir soatdan ko'p bo'lmagan vaqt davomida faol"
|
||
" bo'ladi</b>"
|
||
),
|
||
"web_btn": "🌍 Veb interfeysi",
|
||
"btn_yes": "🚸 Baribir ochiq",
|
||
"btn_no": "🔻 Yopish",
|
||
"lavhost_web": (
|
||
"✌️ <b>Ushbu havola sizni Hikka veb-interfeysiga olib boradi"
|
||
" lavHost</b>\n\n<i>💡 Hisob ma'lumotlaringizdan foydalanib tizimga"
|
||
" kirishingiz kerak,lavHost</i>ni sozlashda ko'rsatilgan"
|
||
),
|
||
"disable_stats": "✅ Anonim statistika ruxsat berildi",
|
||
"enable_stats": "🚫 Anonim statistika o'chirilgan",
|
||
}
|
||
|
||
strings_hi = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>देखने वाले:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>देखने वाला {} नहीं"
|
||
"मिला</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>वॉचर {} अब है"
|
||
" <u>बंद</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>वॉचर {} अब है"
|
||
" <u>सक्षम</u></b>"
|
||
),
|
||
"args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>कृपया एक नाम दर्ज करें"
|
||
"कार्यवाहक</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>के लिए कोई निक स्थिति"
|
||
" नहीं हैयह उपयोगकर्ता: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>इसके लिए एक आदेश"
|
||
" निर्दिष्ट करेंजो NoNick को सक्षम/\\अक्षम करना चाहिए</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>के लिए कोई निक स्थिति"
|
||
" नहीं है </b><code>{}</code><b>: {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>कमांड नहीं मिला</b>"
|
||
),
|
||
"inline_settings": "⚙️ <b>यहां आप अपनी हिक्का सेटिंग प्रबंधित कर सकते हैं</b>",
|
||
"confirm_update": "🧭 <b>अपडेट की पुष्टि करें। यूजरबॉट फिर से चालू हो जाएगा</b>",
|
||
"confirm_restart": "🔄 <b>पुनरारंभ की पुष्टि करें</b>",
|
||
"suggest_fs": "✅ मॉड्यूल को बचाने का सुझाव दें",
|
||
"do_not_suggest_fs": "🚫 मॉड्यूल को बचाने का सुझाव दें",
|
||
"use_fs": "✅ हमेशा मॉड्यूल सेव करें",
|
||
"do_not_use_fs": "🚫 हमेशा मॉड्यूल सेव करें",
|
||
"btn_restart": "🔄 पुनरारंभ करें",
|
||
"btn_update": "🧭 अपडेट",
|
||
"close_menu": "😌 मेन्यू बंद करें",
|
||
"custom_emojis": "✅ कस्टम इमोजी",
|
||
"no_custom_emojis": "🚫 कस्टम इमोजी",
|
||
"suggest_subscribe": "✅ चैनल की सदस्यता का सुझाव दें",
|
||
"do_not_suggest_subscribe": "🚫 चैनल की सदस्यता का सुझाव दें",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>इस कमांड की जरूरत है"
|
||
"चैट में निष्पादित करें</b>"
|
||
),
|
||
"_cls_doc": "उन्नत हिक्का सेटिंग्स",
|
||
"nonick_warning": (
|
||
"ध्यान दें! आपने मानक उपसर्ग के साथ NoNick को शामिल किया है!"
|
||
"आपको हिक्का चैट में म्यूट किया जा सकता है। उपसर्ग बदलें या "
|
||
"वैश्विक NoNick को बंद करें!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>संदेश का जवाब दें"
|
||
"उपयोगकर्ता NoNick को सक्षम करेगा</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>यह क्रिया हिक्का को इस खाते से पूरी तरह से हटा देगी! वह नहीं कर सकता"
|
||
"रद्द करें</b>\n\n<i>- हिक्का से संबंधित सभी चैट हटा दी जाएंगी\n- सत्र"
|
||
" हिक्का रीसेट हो जाएगा\n- हिक्का का इनलाइन बॉट हटा दिया जाएगा</i>"
|
||
),
|
||
"deauth_confirm_step2": (
|
||
"⚠️ <b>क्या आप वाकई हिक्का को अनइंस्टॉल करना चाहते हैं?</b>"
|
||
),
|
||
"deauth_yes": "मुझे यकीन है",
|
||
"deauth_no_1": "मुझे यकीन नहीं है",
|
||
"deauth_no_2": "पक्का नहीं",
|
||
"deauth_no_3": "नहीं",
|
||
"deauth_cancel": "🚫 रद्द करें",
|
||
"deauth_confirm_btn": "😢 Delete",
|
||
"uninstall": "😢 <b>हिक्का अनइंस्टॉल कर रहा है...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>हिक्का को हटा दिया गया है। वेब इंटरफेस अभी भी सक्रिय है, अन्य को"
|
||
" जोड़ा जा सकता हैखाते!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>लॉग्स साफ़ किए गए</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> इसके लिए NoNick सक्षम"
|
||
" ये आदेश:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> इसके लिए NoNick सक्षम"
|
||
" ये उपयोगकर्ता:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> इसके लिए NoNick सक्षम"
|
||
" ये चैट:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷♀️</emoji> <b>कुछ भी नहीं"
|
||
"दिखाएँ...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>यह कमांड हिक्का वेब इंटरफेस तक पहुंच प्रदान करता है। इसका निष्पादन"
|
||
"सार्वजनिक चैट एक सुरक्षा जोखिम है। अधिमानतः प्रदर्शन करें"
|
||
" यह <a href='tg://openmessage?user_id={}'>चुनिंदा संदेशों</a> में है।"
|
||
"अक्षम करने के लिए </b><code>{}proxypass force_insecure</code><b> चलाएँ"
|
||
"यह एक चेतावनी है</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>यह कमांड हिक्का वेब इंटरफेस तक पहुंच प्रदान करता है। इसका निष्पादन"
|
||
"सार्वजनिक चैट एक सुरक्षा जोखिम है। अधिमानतः प्रदर्शन करें"
|
||
" उसे <a href='tg://openmessage?user_id={}'>चुनिंदा संदेशों</a> में।</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>हिक्का वेब इंटरफ़ेस के लिए एक सुरंग खोलना...</b>",
|
||
"tunnel_opened": (
|
||
"🎉 <b>सुरंग खुला है। यह लिंक एक घंटे से अधिक समय तक सक्रिय नहीं रहेगा</b>"
|
||
),
|
||
"web_btn": "🌍 वेब इंटरफ़ेस",
|
||
"btn_yes": "🚸 वैसे भी खोलें",
|
||
"btn_no": "🔻 बंद करें",
|
||
"lavhost_web": (
|
||
"✌️ <b>यह लिंक आपको हिक्का वेब इंटरफेस पर ले जाएगा lvHost</b>\n\n<i>💡 आपको"
|
||
" अपने क्रेडेंशियल्स का उपयोग करके लॉग इन करना होगा,lavHost सेट करते समय"
|
||
" निर्दिष्ट किया गया</i>"
|
||
),
|
||
"disable_stats": "✅ बेनामी आँकड़ों की अनुमति है",
|
||
"enable_stats": "🚫 बेनामी आँकड़े अक्षम किए गए",
|
||
}
|
||
|
||
strings_ja = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>視聴者:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>非閲覧者{}見つかりました</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>ウォッチャー {} は現在"
|
||
"<u>オフ</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>ウォッチャー {} は現在"
|
||
"<u>有効</u></b>"
|
||
),
|
||
"args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>名前を入力してください世話人</b>"
|
||
),
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> のニックネームはありません <b>"
|
||
"このユーザーではありません: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>コマンド"
|
||
" NoNick を有効/\\無効にするユーザーを指定</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> のニックネームはありません <b>"
|
||
" </b><code>{}</code><b>: {}</b> ではありません"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>コマンドが見つかりません</b>"
|
||
),
|
||
"inline_settings": "⚙️ <b>ここで Hikka の設定を管理できます</b>",
|
||
"confirm_update": "🧭 <b>更新を確認します。ユーザーボットが再起動します</b>",
|
||
"confirm_restart": "🔄 <b>再起動を確認</b>",
|
||
"suggest_fs": " モジュールの保存を提案する",
|
||
"do_not_suggest_fs": "🚫 保存モジュールの提案",
|
||
"use_fs": "✅ 常にモジュールを保存",
|
||
"do_not_use_fs": "🚫 常にモジュールを保存",
|
||
"btn_restart": "再起動",
|
||
"btn_update": "🧭更新",
|
||
"close_menu": "メニューを閉じる",
|
||
"custom_emojis": "✅ カスタム絵文字",
|
||
"no_custom_emojis": "🚫カスタム絵文字",
|
||
"suggest_subscribe": " チャンネル登録を提案する",
|
||
"do_not_suggest_subscribe": " チャンネル登録を提案する",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>このコマンドが必要ですチャットで実行</b>"
|
||
),
|
||
"_cls_doc": "ヒッカの詳細設定",
|
||
"nonick_warning": (
|
||
"注意! 標準のプレフィックスに NoNick が含まれています!"
|
||
"Hikka Chat でミュートすることができます。プレフィックスを変更するか, "
|
||
"グローバル NoNick をオフにします!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>メッセージに返信"
|
||
"ユーザーは NoNick を有効にします</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>このアクションにより, このアカウントから Hikka が完全に削除されます! 彼は削除できません"
|
||
"キャンセル</b>\n\n<i>- Hikka に関連するすべてのチャットが削除されます\n- セッション"
|
||
"ヒッカはリセットされます\n- ヒッカのインライン ボットは削除されます</i>"
|
||
),
|
||
"deauth_confirm_step2": "⚠️ <b>Hikka をアンインストールしてもよろしいですか?</b>",
|
||
"deauth_yes": "確かに",
|
||
"deauth_no_1": "わからない",
|
||
"deauth_no_2": "わかりません",
|
||
"deauth_no_3": "いいえ",
|
||
"deauth_cancel": "🚫キャンセル",
|
||
"deauth_confirm_btn": "😢削除",
|
||
"uninstall": "😢 <b>Hikka をアンインストールしています...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka' は廃止されました。Web インターフェースはまだアクティブです。その他アカウントを追加できます!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>ログを消去</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>これには NoNick が有効になっています"
|
||
" これらのコマンド:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>これには NoNick が有効になっています"
|
||
"このユーザー:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>これには NoNick が有効になっています"
|
||
"このチャット:</b>\n\n{}"
|
||
),
|
||
"nothing": "<emoji document_id=5427052514094619126>🤷️</emoji> <b>なし表示...</b>",
|
||
"privacy_leak": (
|
||
"⚠️ <b>このコマンドは, Hikka Web インターフェイスへのアクセスを提供します。その実行"
|
||
"公開チャットはセキュリティ上のリスクです。できれば実行してください"
|
||
"<a href='tg://openmessage?user_id={}'>選択したメッセージ</a>にあります。"
|
||
"</b><code>{}proxypass force_insecure</code><b> を実行して無効にします"
|
||
"これは警告です</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>このコマンドは, Hikka Web インターフェイスへのアクセスを提供します。その実行"
|
||
"公開チャットはセキュリティ上のリスクです。できれば実行してください"
|
||
" <a href='tg://openmessage?user_id={}'>メッセージを選択</a>インチ</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Hikka ウェブ インターフェースへのトンネルを開いています...</b>",
|
||
"tunnel_opened": "🎉 <b>トンネルが開いています。このリンクは 1 時間以上アクティブになりません</b",
|
||
"web_btn": "🌍ウェブインターフェース",
|
||
"btn_yes": "とにかく開く",
|
||
"btn_no": "閉じる",
|
||
"lavhost_web": (
|
||
"✌️ <b>このリンクをクリックすると, Hikka Web インターフェイス lvHost に移動します</b>\n\n<i>💡"
|
||
"lavHost をセットアップするときは, 資格情報を使用してログインする必要があります"
|
||
"指定</i>"
|
||
),
|
||
"disable_stats": "✅ 匿名統計を許可",
|
||
"enable_stats": "🚫 匿名統計は無効",
|
||
}
|
||
|
||
strings_kr = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>시청자:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": "<emoji document_id=5447207618793708263>🚫</emoji> <b>뷰어 아님{}찾았다</b>",
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>감시자 {}이(가) 현재 있습니다"
|
||
" <u>꺼짐</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>감시자 {}이(가) 현재 있습니다"
|
||
" <u>활성화</u></b>"
|
||
),
|
||
"args": "<emoji document_id=5447207618793708263>🚫</emoji> <b>이름을 입력하세요.관리인</b>",
|
||
"user_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>에 대한 닉네임 위치가 없습니다."
|
||
" 이 사용자가 아닙니다: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>명령어"
|
||
" 누가 NoNick을 활성화/\\비활성화할지 지정</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>에 대한 닉네임 위치가 없습니다."
|
||
" </b><code>{}</code><b>가 아닙니다: {}</b>"
|
||
),
|
||
"cmd404": "<emoji document_id=5469791106591890404>🪄</emoji> <b>명령을 찾을 수 없음</b>",
|
||
"inline_settings": "⚙️ <b>여기에서 Hikka 설정을 관리할 수 있습니다.</b>",
|
||
"confirm_update": "🧭 <b>업데이트를 확인하십시오. Userbot이 다시 시작됩니다</b>",
|
||
"confirm_restart": "🔄 <b>다시 시작 확인</b>",
|
||
"suggest_fs": " 저장 모듈 제안",
|
||
"do_not_suggest_fs": "🚫 모듈 저장 제안",
|
||
"use_fs": "✅ 항상 모듈 저장",
|
||
"do_not_use_fs": "🚫 항상 모듈 저장",
|
||
"btn_restart": " 다시 시작",
|
||
"btn_update": "🧭 업데이트",
|
||
"close_menu": " 메뉴 닫기",
|
||
"custom_emojis": "✅ 사용자 정의 그림 이모티콘",
|
||
"no_custom_emojis": "🚫 맞춤 이모티콘",
|
||
"suggest_subscribe": " 채널 구독 제안",
|
||
"do_not_suggest_subscribe": " 채널 구독 제안",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>이 명령이 필요합니다."
|
||
"채팅에서 실행</b>"
|
||
),
|
||
"_cls_doc": "고급 Hikka 설정",
|
||
"nonick_warning": (
|
||
"주의! 표준 접두사에 NoNick을 포함했습니다!Hikka 채팅에서 음소거할 수 있습니다. 접두사를 변경하거나 글로벌 노닉 꺼!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>메시지에 답장"
|
||
"사용자가 NoNick을 활성화합니다</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>이 작업은 이 계정에서 Hikka를 완전히 제거합니다! 그는 할 수 없습니다."
|
||
"취소</b>\n\n<i>- Hikka와 관련된 모든 채팅이 삭제됩니다\n- 세션"
|
||
" Hikka가 재설정됩니다\n- Hikka의 인라인 봇이 제거됩니다</i>"
|
||
),
|
||
"deauth_confirm_step2": "⚠️ <b>Hikka를 제거하시겠습니까?</b>",
|
||
"deauth_yes": "확실합니다",
|
||
"deauth_no_1": "잘 모르겠습니다",
|
||
"deauth_no_2": "확실하지 않음",
|
||
"deauth_no_3": "아니요",
|
||
"deauth_cancel": "🚫 취소",
|
||
"deauth_confirm_btn": "😢 삭제",
|
||
"uninstalling": "😢 <b>Hikka 제거 중...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka'는 더 이상 사용되지 않습니다. 웹 인터페이스는 여전히 활성화되어 있습니다. 계정을 추가할 수 있습니다!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>로그 삭제</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick이 활성화되었습니다."
|
||
" 다음 명령:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick이 활성화되었습니다."
|
||
" 이 사용자:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick이 활성화되었습니다."
|
||
" 이 채팅:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷️</emoji> <b>아무것도 없음보여줘...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>이 명령은 Hikka 웹 인터페이스에 대한 액세스를 제공합니다. 실행"
|
||
"공개채팅은 보안상 위험합니다. 가급적이면 수행하세요."
|
||
"<a href='tg://openmessage?user_id={}'>메시지 선택</a>에 있습니다."
|
||
"</b><code>{}proxypass force_insecure</code><b>를 실행하여 비활성화"
|
||
"경고입니다</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>이 명령은 Hikka 웹 인터페이스에 대한 액세스를 제공합니다. 실행"
|
||
"공개채팅은 보안상 위험합니다. 가급적이면 수행하세요."
|
||
" <a href='tg://openmessage?user_id={}'>메시지 선택</a> 안에.</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Hikka 웹 인터페이스에 터널을 여는 중...</b>",
|
||
"tunnel_opened": "🎉 <b>터널이 열려 있습니다. 이 링크는 1시간 이상 활성화되지 않습니다</b>",
|
||
"web_btn": "🌍 웹 인터페이스",
|
||
"btn_yes": " 어쨌든 열기",
|
||
"btn_no": " 닫기",
|
||
"lavhost_web": (
|
||
"✌️ <b>이 링크는 Hikka 웹 인터페이스 lvHost</b>로 이동합니다.\n\n<i>💡"
|
||
"lavHost를 설정할 때 자격 증명을 사용하여 로그인해야 합니다"
|
||
"지정됨</i>"
|
||
),
|
||
"disable_stats": "✅ 익명 통계 허용됨",
|
||
"enable_stats": "🚫 익명 통계 비활성화됨",
|
||
}
|
||
|
||
strings_ar = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420> 👀 </emoji>"
|
||
"<b> المشاهد, ن: </b>\n\n<b> {} </b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b> ليس عارض {}"
|
||
"تم العث, ر عليه </b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420> 👀 </emoji> <b> المشاهد {} الآن"
|
||
"<u> إيقاف </u> </b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420> 👀 </emoji> <b> المشاهد {} الآن"
|
||
"<u> ممكّن </u> </b>"
|
||
),
|
||
"أرغس": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b> الرجاء إدخال اسم"
|
||
"مشرف </b>"
|
||
),
|
||
"user_nn": (
|
||
"لا ي, جد م, ضع لقب لـ <emoji document_id=5469791106591890404>🪄</emoji> <b>"
|
||
"ليس هذا المستخدم: {} </b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> أمر خاص بها"
|
||
"تحديد من يجب عليه تمكين / \\ تعطيل NoNick </b>"
|
||
),
|
||
"cmd_nn": (
|
||
"لا ي, جد م, ضع لقب لـ <emoji document_id=5469791106591890404>🪄</emoji> <b>"
|
||
"ليس </b> <code> {} </code> <b>: {} </b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> الأمر غير م, ج, د"
|
||
" </b>"
|
||
),
|
||
"inline_settings": "⚙️ <b> هنا يمكنك إدارة إعدادات Hikka </b>",
|
||
"Confirm_update": "🧭 <b> أكد التحديث. سيعيد Userbot إعادة التشغيل </b>",
|
||
"irm_restart ": " 🔄 <b> تأكيد إعادة التشغيل </b> ",
|
||
"Suggest_fs": "اقتراح , حدة حفظ",
|
||
"do_not_suggest_fs": "🚫 اقتراح , حدة حفظ",
|
||
"use_fs": "✅ احفظ ال, حدات دائمًا",
|
||
"do_not_use_fs": "🚫 احفظ ال, حدات دائمًا",
|
||
"btn_restart": "إعادة التشغيل",
|
||
"btn_update": "🧭 تحديث",
|
||
"close_menu": "إغلاق القائمة",
|
||
"custom_emojis": "✅ Custom Emoji",
|
||
"no_custom_emojis": "🚫 Custom Emoji",
|
||
"suggest_subscribe": "اقتراح اشتراك قناة",
|
||
"do_not_suggest_subscribe": "اقتراح اشتراك قناة",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b> هذا الأمر مطل, ب"
|
||
"تنفيذ في الدردشة </b>"
|
||
),
|
||
"_cls_doc": "إعدادات Hikka المتقدمة",
|
||
"nonick_warning": (
|
||
"تنبيه! لقد قمت بتضمين NoNick مع البادئة القياسية!"
|
||
"يمكن كتم ص, تك في Hikka Chat. قم بتغيير البادئة أ, "
|
||
"إيقاف تشغيل NoNick العالمية!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b> الرد على الرسالة"
|
||
"سيق, م المستخدم بتمكين NoNick </b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b> سيؤدي هذا الإجراء إلى إزالة Hikka تمامًا من هذا الحساب! لا يمكنه"
|
||
" ذلكإلغاء </b>\n\n<i> - سيتم حذف كافة الدردشات المتعلقة بهيكا\n-"
|
||
" الجلسةستتم إعادة تعيين Hikka\n- ستتم إزالة برنامج Hikka المضمن </i>"
|
||
),
|
||
"deauth_confirm_step2": "⚠️ <b> هل أنت متأكد من أنك تريد إزالة Hikka؟ </b>",
|
||
"deauth_yes": "أنا متأكد",
|
||
"deauth_no_1": "لست متأكدًا",
|
||
"deauth_no_2": "لست متأكدًا",
|
||
"deauth_no_3": "لا",
|
||
"deauth_cancel": "🚫 إلغاء",
|
||
"deauth_confirm_btn": "😢 حذف",
|
||
"uninstalling": "😢 <b> إزالة Hikka ... </b>",
|
||
"uninstalled": (
|
||
"<b>تم إهمال Hikka. , اجهة ال, يب لا تزال نشطة , , البعض الآخر"
|
||
"يمكن أن تضاف حسابات! </b>"
|
||
),
|
||
"logs_cleared": "🗑 <b> تم مسح السجلات </b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> تم تمكين NoNick لهذا"
|
||
"هذه الأ, امر: </b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> تم تمكين NoNick لهذا"
|
||
"هذا المستخدم: </b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b> تم تمكين NoNick لهذا"
|
||
"هذه الدردشة: </b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126> 🤷️ </emoji> <b> لا شيءعرض ... </b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b> ي, فر هذا الأمر ال, ص, ل إلى , اجهة , يب Hikka. تنفيذه"
|
||
"الدردشة العامة تشكل مخاطرة أمنية. , يفضل أن تؤدي"
|
||
"إنه م, ج, د في <a href='tg://openmessage؟user_id={}'> حدد الرسائل </a>."
|
||
"تشغيل </b> <code> {proxypass force_insecure </code> <b> للتعطيل"
|
||
"هذا تحذير </b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b> ي, فر هذا الأمر ال, ص, ل إلى , اجهة , يب Hikka. تنفيذه"
|
||
"الدردشة العامة تشكل مخاطرة أمنية. , يفضل أن تؤدي"
|
||
"<a href='tg://openmessage؟user_id={}'> حدد الرسائل</a> في. </b> "
|
||
),
|
||
"open_tunnel": "🔁 <b> فتح نفق ل, اجهة , يب Hikka ... </b>",
|
||
"tunnel_opened": (
|
||
"🎉 <b> النفق مفت, ح. لن يك, ن هذا الرابط نشطًا لأكثر من ساعة </b>"
|
||
),
|
||
"web_btn": "🌍 , اجهة ال, يب",
|
||
"btn_yes": "فتح على أي حال",
|
||
"btn_no": "إغلاق",
|
||
"lavhost_web": (
|
||
"✌️ <b> سينقلك هذا الارتباط إلى , اجهة , يب Hikka lvHost </b>\n\n<i> 💡"
|
||
"يجب تسجيل الدخ, ل باستخدام بيانات الاعتماد الخاصة بك عند إعداد lavHost"
|
||
"محدد </ i>"
|
||
),
|
||
"disable_stats": "✅ يسمح بإحصاءات مجه, لة",
|
||
"enable_stats": "🚫 تم تعطيل الإحصائيات المجه, لة",
|
||
}
|
||
|
||
strings_es = {
|
||
"watchers": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji>"
|
||
" <b>Espectadores:</b>\n\n<b>{}</b>"
|
||
),
|
||
"mod404": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>No visor {}"
|
||
"Encontrado</b>"
|
||
),
|
||
"disabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>observador {} ya está"
|
||
" <u>apagado</u></b>"
|
||
),
|
||
"enabled": (
|
||
"<emoji document_id=5424885441100782420>👀</emoji> <b>observador {} ya está"
|
||
" <u>habilitado</u></b>"
|
||
),
|
||
"args": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Por favor ingrese un"
|
||
" nombrecuidador</b>"
|
||
),
|
||
"user_nn": (
|
||
"No hay posición de nick para <emoji"
|
||
" document_id=5469791106591890404>🪄</emoji> <b> no es este usuario: {}</b>"
|
||
),
|
||
"no_cmd": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Un comando para ello"
|
||
" Especificar quién debe activar/desactivar NoNick</b>"
|
||
),
|
||
"cmd_nn": (
|
||
"No hay posición de nick para <emoji"
|
||
" document_id=5469791106591890404>🪄</emoji> <b> no es"
|
||
" </b><código>{}</código><b>: {}</b>"
|
||
),
|
||
"cmd404": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>Comando no"
|
||
" encontrado</b>"
|
||
),
|
||
"inline_settings": (
|
||
"⚙️ <b>Aquí puedes administrar la configuración de Hikka</b>"
|
||
),
|
||
"confirm_update": "🧭 <b>Confirmar actualización. Userbot se reiniciará</b>",
|
||
"confirm_restart": "🔄 <b>Confirmar reinicio</b>",
|
||
"suggest_fs": " Sugerir guardar módulo",
|
||
"do_not_suggest_fs": "🚫 Sugerir guardar módulo",
|
||
"use_fs": "✅ Guardar siempre los módulos",
|
||
"do_not_use_fs": "🚫 Guardar siempre los módulos",
|
||
"btn_restart": "reiniciar",
|
||
"btn_update": "🧭 actualizar",
|
||
"close_menu": " Cerrar Menú",
|
||
"custom_emojis": "✅ Emoji personalizado",
|
||
"no_custom_emojis": "🚫Emoji personalizado",
|
||
"suggest_subscribe": "Sugerir suscripción al canal",
|
||
"do_not_suggest_subscribe": " Sugerir suscripción al canal",
|
||
"private_not_allowed": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>Este comando es"
|
||
" necesarioEjecutar en el chat</b>"
|
||
),
|
||
"_cls_doc": "Configuración avanzada de Hikka",
|
||
"nonick_warning": (
|
||
"¡Atención! ¡Has incluido NoNick con el prefijo estándar!"
|
||
"Puedes silenciarte en Hikka Chat. Cambia el prefijo o "
|
||
"¡Apaga el NoNick global!"
|
||
),
|
||
"reply_required": (
|
||
"<emoji document_id=5447207618793708263>🚫</emoji> <b>responder al mensaje"
|
||
"El usuario habilitará NoNick</b>"
|
||
),
|
||
"deauth_confirm": (
|
||
"⚠️ <b>¡Esta acción eliminará completamente a Hikka de esta cuenta! Él no"
|
||
" puedeCancelar</b>\n\n<i>- Se eliminarán todos los chats relacionados con"
|
||
" Hikka\n- Sesión Hikka se reiniciará\n- El bot en línea de Hikka se"
|
||
" eliminará</i>"
|
||
),
|
||
"deauth_confirm_step2": (
|
||
"⚠️ <b>¿Está seguro de que desea desinstalar Hikka?</b>"
|
||
),
|
||
"deauth_yes": "Estoy seguro",
|
||
"deauth_no_1": "No estoy seguro",
|
||
"deauth_no_2": "No estoy seguro",
|
||
"deauth_no_3": "No",
|
||
"deauth_cancel": "🚫 Cancelar",
|
||
"deauth_confirm_btn": "😢 Eliminar",
|
||
"uninstall": "😢 <b>Desinstalando Hikka...</b>",
|
||
"uninstalled": (
|
||
"😢 <b>Hikka' ha quedado obsoleto. La interfaz web todavía está activa,"
|
||
" otros¡Se pueden agregar cuentas!</b>"
|
||
),
|
||
"logs_cleared": "🗑 <b>Registros borrados</b>",
|
||
"cmd_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick habilitado para"
|
||
" esto Estos comandos:</b>\n\n{}"
|
||
),
|
||
"user_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick habilitado para"
|
||
" estoEste usuario:</b>\n\n{}"
|
||
),
|
||
"chat_nn_list": (
|
||
"<emoji document_id=5469791106591890404>🪄</emoji> <b>NoNick habilitado para"
|
||
" esto Este chat:</b>\n\n{}"
|
||
),
|
||
"nothing": (
|
||
"<emoji document_id=5427052514094619126>🤷️</emoji> <b>nadaMostrar...</b>"
|
||
),
|
||
"privacy_leak": (
|
||
"⚠️ <b>Este comando proporciona acceso a la interfaz web de Hikka. Su"
|
||
" ejecuciónEl chat público es un riesgo de seguridad. Preferiblemente"
|
||
" realizarEstá en <a href='tg://openmessage?user_id={}'>mensajes"
|
||
" seleccionados</a>Ejecute </b><code>{}proxypass force_insecure</code><b>"
|
||
" para desactivarEsto es una advertencia</b>"
|
||
),
|
||
"privacy_leak_nowarn": (
|
||
"⚠️ <b>Este comando proporciona acceso a la interfaz web de Hikka. Su"
|
||
" ejecuciónEl chat público es un riesgo de seguridad. Preferiblemente"
|
||
" realizar <a href='tg://openmessage?user_id={}'>seleccionar mensajes</a>"
|
||
" pulg.</b>"
|
||
),
|
||
"opening_tunnel": "🔁 <b>Abriendo un túnel a la interfaz web de Hikka...</b>",
|
||
"túnel_abierto": (
|
||
"🎉 <b>el túnel está abierto. Este enlace no estará activo durante más de"
|
||
" una hora</b>"
|
||
),
|
||
"web_btn": "🌍 Interfaz web",
|
||
"btn_yes": " Abrir de todos modos",
|
||
"btn_no": "Cerrar",
|
||
"lavhost_web": (
|
||
"✌️ <b>Este enlace lo llevará a la interfaz web de Hikka lvHost</b>\n\n<i>💡"
|
||
"debe iniciar sesión con sus credenciales al configurar lavHost"
|
||
"Especificado</i>"
|
||
),
|
||
"disable_stats": "✅ Estadísticas anónimas permitidas",
|
||
"enable_stats": "🚫 Estadísticas anónimas deshabilitadas",
|
||
}
|
||
|
||
def get_watchers(self) -> tuple:
|
||
return [
|
||
str(watcher.__self__.__class__.strings["name"])
|
||
for watcher in self.allmodules.watchers
|
||
if watcher.__self__.__class__.strings is not None
|
||
], self._db.get(main.__name__, "disabled_watchers", {})
|
||
|
||
async def _uninstall(self, call: InlineCall):
|
||
await call.edit(self.strings("uninstall"))
|
||
|
||
async with self._client.conversation("@BotFather") as conv:
|
||
for msg in [
|
||
"/deletebot",
|
||
f"@{self.inline.bot_username}",
|
||
"Yes, I am totally sure.",
|
||
]:
|
||
m = await conv.send_message(msg)
|
||
r = await conv.get_response()
|
||
|
||
logger.debug(">> %s", m.raw_text)
|
||
logger.debug("<< %s", r.raw_text)
|
||
|
||
await m.delete()
|
||
await r.delete()
|
||
|
||
async for dialog in self._client.iter_dialogs(
|
||
None,
|
||
ignore_migrated=True,
|
||
):
|
||
if (
|
||
dialog.name
|
||
in {
|
||
"hikka-logs",
|
||
"hikka-onload",
|
||
"hikka-assets",
|
||
"hikka-backups",
|
||
"hikka-acc-switcher",
|
||
"silent-tags",
|
||
}
|
||
and dialog.is_channel
|
||
and (
|
||
dialog.entity.participants_count == 1
|
||
or dialog.entity.participants_count == 2
|
||
and dialog.name in {"hikka-logs", "silent-tags"}
|
||
)
|
||
or (
|
||
self._client.loader.inline.init_complete
|
||
and dialog.entity.id == self._client.loader.inline.bot_id
|
||
)
|
||
):
|
||
await self._client.delete_dialog(dialog.entity)
|
||
|
||
folders = await self._client(GetDialogFiltersRequest())
|
||
|
||
if any(folder.title == "hikka" for folder in folders):
|
||
folder_id = max(
|
||
folders,
|
||
key=lambda x: x.id,
|
||
).id
|
||
|
||
await self._client(UpdateDialogFilterRequest(id=folder_id))
|
||
|
||
for handler in logging.getLogger().handlers:
|
||
handler.setLevel(logging.CRITICAL)
|
||
|
||
await self._client.log_out()
|
||
|
||
await call.edit(self.strings("uninstalled"))
|
||
|
||
if "LAVHOST" in os.environ:
|
||
os.system("lavhost restart")
|
||
return
|
||
|
||
atexit.register(restart, *sys.argv[1:])
|
||
sys.exit(0)
|
||
|
||
async def _uninstall_confirm_step_2(self, call: InlineCall):
|
||
await call.edit(
|
||
self.strings("deauth_confirm_step2"),
|
||
utils.chunks(
|
||
list(
|
||
sorted(
|
||
[
|
||
{
|
||
"text": self.strings("deauth_yes"),
|
||
"callback": self._uninstall,
|
||
},
|
||
*[
|
||
{
|
||
"text": self.strings(f"deauth_no_{i}"),
|
||
"action": "close",
|
||
}
|
||
for i in range(1, 4)
|
||
],
|
||
],
|
||
key=lambda _: random.random(),
|
||
)
|
||
),
|
||
2,
|
||
)
|
||
+ [
|
||
[
|
||
{
|
||
"text": self.strings("deauth_cancel"),
|
||
"action": "close",
|
||
}
|
||
]
|
||
],
|
||
)
|
||
|
||
@loader.owner
|
||
@loader.command(
|
||
ru_doc="Удалить Hikka",
|
||
de_doc="Hikka deinstallieren",
|
||
tr_doc="Hikka'yı kaldır",
|
||
uz_doc="Hikka'ni o'chirish",
|
||
hi_doc="हिक्का को अनइंस्टॉल करें",
|
||
ja_doc="Hikkaをアンインストールします",
|
||
kr_doc="Hikka를 제거합니다",
|
||
ar_doc="إلغاء تثبيت هيكا",
|
||
es_doc="Desinstalar Hikka",
|
||
)
|
||
async def uninstall_hikka(self, message: Message):
|
||
"""Uninstall Hikka"""
|
||
await self.inline.form(
|
||
self.strings("deauth_confirm"),
|
||
message,
|
||
[
|
||
{
|
||
"text": self.strings("deauth_confirm_btn"),
|
||
"callback": self._uninstall_confirm_step_2,
|
||
},
|
||
{"text": self.strings("deauth_cancel"), "action": "close"},
|
||
],
|
||
)
|
||
|
||
@loader.command(
|
||
ru_doc="Очистить логи",
|
||
de_doc="Logs löschen",
|
||
tr_doc="Günlükleri temizle",
|
||
uz_doc="Jurnalni tozalash",
|
||
hi_doc="लॉग खाली करें",
|
||
ja_doc="ログをクリアする",
|
||
kr_doc="로그 지우기",
|
||
ar_doc="مسح السجلات",
|
||
es_doc="Limpiar registros",
|
||
)
|
||
async def clearlogs(self, message: Message):
|
||
"""Clear logs"""
|
||
for handler in logging.getLogger().handlers:
|
||
handler.buffer = []
|
||
handler.handledbuffer = []
|
||
handler.tg_buff = ""
|
||
|
||
await utils.answer(message, self.strings("logs_cleared"))
|
||
|
||
@loader.command(
|
||
ru_doc="Показать активные смотрители",
|
||
de_doc="Aktive Beobachter anzeigen",
|
||
tr_doc="Etkin gözlemcileri göster",
|
||
uz_doc="Faol ko'rib chiqqanlarni ko'rsatish",
|
||
hi_doc="सक्रिय दर्शक दिखाएं",
|
||
ja_doc="アクティブな観察者を表示する",
|
||
kr_doc="활성 관찰자 표시",
|
||
ar_doc="عرض المراقبين النشطين",
|
||
es_doc="Mostrar observadores activos",
|
||
)
|
||
async def watchers(self, message: Message):
|
||
"""List current watchers"""
|
||
watchers, disabled_watchers = self.get_watchers()
|
||
watchers = [
|
||
f"♻️ {watcher}"
|
||
for watcher in watchers
|
||
if watcher not in list(disabled_watchers.keys())
|
||
]
|
||
watchers += [f"💢 {k} {v}" for k, v in disabled_watchers.items()]
|
||
await utils.answer(
|
||
message, self.strings("watchers").format("\n".join(watchers))
|
||
)
|
||
|
||
@loader.command(
|
||
ru_doc="<module> - Включить/выключить смотрителя в текущем чате",
|
||
de_doc="<module> - Aktiviere/Deaktiviere Beobachter in diesem Chat",
|
||
tr_doc="<module> - Bu sohbetteki gözlemciyi etkinleştirin/devre dışı bırakın",
|
||
uz_doc="<module> - Joriy suhbatda ko'rib chiqqanlarni yoqish/yopish",
|
||
hi_doc="<module> - इस चैट में दर्शक को सक्षम / अक्षम करें",
|
||
ja_doc="<module> - このチャットで観察者を有効/無効にする",
|
||
kr_doc="<module> -이 채팅에서 관찰자를 활성화 / 비활성화",
|
||
ar_doc="<module> - تمكين / تعطيل المراقب في الدردشة الحالية",
|
||
es_doc="<module> - Habilitar / deshabilitar observador en este chat",
|
||
)
|
||
async def watcherbl(self, message: Message):
|
||
"""<module> - Toggle watcher in current chat"""
|
||
args = utils.get_args_raw(message)
|
||
if not args:
|
||
await utils.answer(message, self.strings("args"))
|
||
return
|
||
|
||
watchers, disabled_watchers = self.get_watchers()
|
||
|
||
if args.lower() not in map(lambda x: x.lower(), watchers):
|
||
await utils.answer(message, self.strings("mod404").format(args))
|
||
return
|
||
|
||
args = next((x.lower() == args.lower() for x in watchers), False)
|
||
|
||
current_bl = [
|
||
v for k, v in disabled_watchers.items() if k.lower() == args.lower()
|
||
]
|
||
current_bl = current_bl[0] if current_bl else []
|
||
|
||
chat = utils.get_chat_id(message)
|
||
if chat not in current_bl:
|
||
if args in disabled_watchers:
|
||
for k in disabled_watchers:
|
||
if k.lower() == args.lower():
|
||
disabled_watchers[k].append(chat)
|
||
break
|
||
else:
|
||
disabled_watchers[args] = [chat]
|
||
|
||
await utils.answer(
|
||
message,
|
||
self.strings("disabled").format(args) + " <b>in current chat</b>",
|
||
)
|
||
else:
|
||
for k in disabled_watchers.copy():
|
||
if k.lower() == args.lower():
|
||
disabled_watchers[k].remove(chat)
|
||
if not disabled_watchers[k]:
|
||
del disabled_watchers[k]
|
||
break
|
||
|
||
await utils.answer(
|
||
message,
|
||
self.strings("enabled").format(args) + " <b>in current chat</b>",
|
||
)
|
||
|
||
self._db.set(main.__name__, "disabled_watchers", disabled_watchers)
|
||
|
||
@loader.command(
|
||
ru_doc=(
|
||
"<модуль> - Управление глобальными правилами смотрителя\n"
|
||
"Аргументы:\n"
|
||
"[-c - только в чатах]\n"
|
||
"[-p - только в лс]\n"
|
||
"[-o - только исходящие]\n"
|
||
"[-i - только входящие]"
|
||
),
|
||
de_doc=(
|
||
"<module> - Verwalte globale Beobachterregeln\n"
|
||
"Argumente:\n"
|
||
"[-c - Nur in Chats]\n"
|
||
"[-p - Nur in privaten Chats]\n"
|
||
"[-o - Nur ausgehende Nachrichten]\n"
|
||
"[-i - Nur eingehende Nachrichten]"
|
||
),
|
||
tr_doc=(
|
||
"<module> - Genel gözlemci kurallarını yönetin\n"
|
||
"Argümanlar:\n"
|
||
"[-c - Yalnızca sohbetlerde]\n"
|
||
"[-p - Yalnızca özel sohbetlerde]\n"
|
||
"[-o - Yalnızca giden mesajlar]\n"
|
||
"[-i - Yalnızca gelen mesajlar]"
|
||
),
|
||
uz_doc=(
|
||
"<module> - Umumiy ko'rib chiqqan qoidalarni boshqarish\n"
|
||
"Argumentlar:\n"
|
||
"[-c - Faqat suhbatlarda]\n"
|
||
"[-p - Faqat shaxsiy suhbatlarda]\n"
|
||
"[-o - Faqat chiqarilgan xabarlar]\n"
|
||
"[-i - Faqat kelgan xabarlar]"
|
||
),
|
||
hi_doc=(
|
||
"<module> - सार्वजनिक निरीक्षक नियमों का प्रबंधन करें\n"
|
||
"आर्ग्यूमेंट्स:\n"
|
||
"[-c - केवल चैट्स में]\n"
|
||
"[-p - केवल निजी चैट में]\n"
|
||
"[-o - केवल आउटगोइंग संदेश]\n"
|
||
"[-i - केवल इनकमिंग संदेश]"
|
||
),
|
||
ja_doc=(
|
||
"<module> - グローバル観察者ルールを管理します\n"
|
||
"引数:\n"
|
||
"[-c - チャットのみ]\n"
|
||
"[-p - プライベートチャットのみ]\n"
|
||
"[-o - 送信メッセージのみ]\n"
|
||
"[-i - 受信メッセージのみ]"
|
||
),
|
||
kr_doc=(
|
||
"<module> - 전역 관찰자 규칙을 관리합니다\n"
|
||
"인수:\n"
|
||
"[-c - 채팅 만]\n"
|
||
"[-p - 개인 채팅 만]\n"
|
||
"[-o - 보낸 메시지 만]\n"
|
||
"[-i - 수신 메시지 만]"
|
||
),
|
||
ar_doc=(
|
||
"<module> - إدارة قواعد المراقب العامة\n"
|
||
"الوسائط:\n"
|
||
"[-c - فقط الدردشات]\n"
|
||
"[-p - فقط الدردشات الخاصة]\n"
|
||
"[-o - فقط الرسائل الصادرة]\n"
|
||
"[-i - الرسائل الواردة فقط]"
|
||
),
|
||
es_doc=(
|
||
"<module> - Administre las reglas del observador global\n"
|
||
"Argumentos:\n"
|
||
"[-c - Solo en chats]\n"
|
||
"[-p - Solo en chats privados]\n"
|
||
"[-o - Solo mensajes salientes]\n"
|
||
"[-i - Solo mensajes entrantes]"
|
||
),
|
||
)
|
||
async def watchercmd(self, message: Message):
|
||
"""<module> - Toggle global watcher rules
|
||
Args:
|
||
[-c - only in chats]
|
||
[-p - only in pm]
|
||
[-o - only out]
|
||
[-i - only incoming]"""
|
||
args = utils.get_args_raw(message)
|
||
if not args:
|
||
return await utils.answer(message, self.strings("args"))
|
||
|
||
chats, pm, out, incoming = False, False, False, False
|
||
|
||
if "-c" in args:
|
||
args = args.replace("-c", "").replace(" ", " ").strip()
|
||
chats = True
|
||
|
||
if "-p" in args:
|
||
args = args.replace("-p", "").replace(" ", " ").strip()
|
||
pm = True
|
||
|
||
if "-o" in args:
|
||
args = args.replace("-o", "").replace(" ", " ").strip()
|
||
out = True
|
||
|
||
if "-i" in args:
|
||
args = args.replace("-i", "").replace(" ", " ").strip()
|
||
incoming = True
|
||
|
||
if chats and pm:
|
||
pm = False
|
||
if out and incoming:
|
||
incoming = False
|
||
|
||
watchers, disabled_watchers = self.get_watchers()
|
||
|
||
if args.lower() not in [watcher.lower() for watcher in watchers]:
|
||
return await utils.answer(message, self.strings("mod404").format(args))
|
||
|
||
args = [watcher for watcher in watchers if watcher.lower() == args.lower()][0]
|
||
|
||
if chats or pm or out or incoming:
|
||
disabled_watchers[args] = [
|
||
*(["only_chats"] if chats else []),
|
||
*(["only_pm"] if pm else []),
|
||
*(["out"] if out else []),
|
||
*(["in"] if incoming else []),
|
||
]
|
||
self._db.set(main.__name__, "disabled_watchers", disabled_watchers)
|
||
await utils.answer(
|
||
message,
|
||
self.strings("enabled").format(args)
|
||
+ f" (<code>{disabled_watchers[args]}</code>)",
|
||
)
|
||
return
|
||
|
||
if args in disabled_watchers and "*" in disabled_watchers[args]:
|
||
await utils.answer(message, self.strings("enabled").format(args))
|
||
del disabled_watchers[args]
|
||
self._db.set(main.__name__, "disabled_watchers", disabled_watchers)
|
||
return
|
||
|
||
disabled_watchers[args] = ["*"]
|
||
self._db.set(main.__name__, "disabled_watchers", disabled_watchers)
|
||
await utils.answer(message, self.strings("disabled").format(args))
|
||
|
||
@loader.command(
|
||
ru_doc="Включить NoNick для определенного пользователя",
|
||
de_doc="Aktiviere NoNick für einen bestimmten Benutzer",
|
||
tr_doc="Belirli bir kullanıcı için NoNick'i etkinleştirin",
|
||
uz_doc="Belgilangan foydalanuvchi uchun NoNickni yoqish",
|
||
hi_doc="किसी विशिष्ट उपयोगकर्ता के लिए NoNick को सक्षम करें",
|
||
ja_doc="特定のユーザーのNoNickを有効にします",
|
||
kr_doc="특정 사용자의 NoNick를 활성화합니다",
|
||
ar_doc="تمكين NoNick لمستخدم معين",
|
||
es_doc="Habilitar NoNick para un usuario específico",
|
||
)
|
||
async def nonickuser(self, message: Message):
|
||
"""Allow no nickname for certain user"""
|
||
reply = await message.get_reply_message()
|
||
if not reply:
|
||
await utils.answer(message, self.strings("reply_required"))
|
||
return
|
||
|
||
u = reply.sender_id
|
||
if not isinstance(u, int):
|
||
u = u.user_id
|
||
|
||
nn = self._db.get(main.__name__, "nonickusers", [])
|
||
if u not in nn:
|
||
nn += [u]
|
||
nn = list(set(nn)) # skipcq: PTC-W0018
|
||
await utils.answer(message, self.strings("user_nn").format("on"))
|
||
else:
|
||
nn = list(set(nn) - {u})
|
||
await utils.answer(message, self.strings("user_nn").format("off"))
|
||
|
||
self._db.set(main.__name__, "nonickusers", nn)
|
||
|
||
@loader.command(
|
||
ru_doc="Включить NoNick для определенного чата",
|
||
de_doc="Aktiviere NoNick für einen bestimmten Chat",
|
||
tr_doc="Belirli bir sohbet için NoNick'i etkinleştirin",
|
||
uz_doc="Belgilangan suhbat uchun NoNickni yoqish",
|
||
hi_doc="किसी विशिष्ट चैट के लिए NoNick को सक्षम करें",
|
||
ja_doc="特定のチャットのNoNickを有効にします",
|
||
kr_doc="특정 채팅의 NoNick를 활성화합니다",
|
||
ar_doc="تمكين NoNick لدردشة معينة",
|
||
es_doc="Habilitar NoNick para un chat específico",
|
||
)
|
||
async def nonickchat(self, message: Message):
|
||
"""Allow no nickname in certain chat"""
|
||
if message.is_private:
|
||
await utils.answer(message, self.strings("private_not_allowed"))
|
||
return
|
||
|
||
chat = utils.get_chat_id(message)
|
||
|
||
nn = self._db.get(main.__name__, "nonickchats", [])
|
||
if chat not in nn:
|
||
nn += [chat]
|
||
nn = list(set(nn)) # skipcq: PTC-W0018
|
||
await utils.answer(
|
||
message,
|
||
self.strings("cmd_nn").format(
|
||
utils.escape_html((await message.get_chat()).title),
|
||
"on",
|
||
),
|
||
)
|
||
else:
|
||
nn = list(set(nn) - {chat})
|
||
await utils.answer(
|
||
message,
|
||
self.strings("cmd_nn").format(
|
||
utils.escape_html((await message.get_chat()).title),
|
||
"off",
|
||
),
|
||
)
|
||
|
||
self._db.set(main.__name__, "nonickchats", nn)
|
||
|
||
@loader.command(
|
||
ru_doc="Включить NoNick для определенной команды",
|
||
de_doc="Aktiviere NoNick für einen bestimmten Befehl",
|
||
tr_doc="Belirli bir komut için NoNick'i etkinleştirin",
|
||
uz_doc="Belgilangan buyruq uchun NoNickni yoqish",
|
||
hi_doc="किसी विशिष्ट आदेश के लिए NoNick को सक्षम करें",
|
||
ja_doc="特定のコマンドのNoNickを有効にします",
|
||
kr_doc="특정 명령의 NoNick를 활성화합니다",
|
||
ar_doc="تمكين NoNick لأمر معين",
|
||
es_doc="Habilitar NoNick para un comando específico",
|
||
)
|
||
async def nonickcmdcmd(self, message: Message):
|
||
"""Allow certain command to be executed without nickname"""
|
||
args = utils.get_args_raw(message)
|
||
if not args:
|
||
await utils.answer(message, self.strings("no_cmd"))
|
||
return
|
||
|
||
if args not in self.allmodules.commands:
|
||
await utils.answer(message, self.strings("cmd404"))
|
||
return
|
||
|
||
nn = self._db.get(main.__name__, "nonickcmds", [])
|
||
if args not in nn:
|
||
nn += [args]
|
||
nn = list(set(nn))
|
||
await utils.answer(
|
||
message,
|
||
self.strings("cmd_nn").format(
|
||
self.get_prefix() + args,
|
||
"on",
|
||
),
|
||
)
|
||
else:
|
||
nn = list(set(nn) - {args})
|
||
await utils.answer(
|
||
message,
|
||
self.strings("cmd_nn").format(
|
||
self.get_prefix() + args,
|
||
"off",
|
||
),
|
||
)
|
||
|
||
self._db.set(main.__name__, "nonickcmds", nn)
|
||
|
||
@loader.command(
|
||
ru_doc="Показать список активных NoNick команд",
|
||
de_doc="Zeige eine Liste der aktiven NoNick Befehle",
|
||
tr_doc="Etkin NoNick komutlarının listesini göster",
|
||
uz_doc="Yoqilgan NoNick buyruqlar ro'yxatini ko'rsatish",
|
||
hi_doc="सक्रिय NoNick कमांडों की सूची दिखाएं",
|
||
ja_doc="アクティブなNoNickコマンドのリストを表示します",
|
||
kr_doc="활성 NoNick 명령 목록 표시",
|
||
ar_doc="عرض قائمة أوامر NoNick النشطة",
|
||
es_doc="Mostrar una lista de comandos NoNick activos",
|
||
)
|
||
async def nonickcmds(self, message: Message):
|
||
"""Returns the list of NoNick commands"""
|
||
if not self._db.get(main.__name__, "nonickcmds", []):
|
||
await utils.answer(message, self.strings("nothing"))
|
||
return
|
||
|
||
await utils.answer(
|
||
message,
|
||
self.strings("cmd_nn_list").format(
|
||
"\n".join(
|
||
[
|
||
f"▫️ <code>{self.get_prefix()}{cmd}</code>"
|
||
for cmd in self._db.get(main.__name__, "nonickcmds", [])
|
||
]
|
||
)
|
||
),
|
||
)
|
||
|
||
@loader.command(
|
||
ru_doc="Показать список активных NoNick пользователей",
|
||
de_doc="Zeige eine Liste der aktiven NoNick Benutzer",
|
||
tr_doc="Etkin NoNick kullanıcılarının listesini göster",
|
||
uz_doc="Yoqilgan NoNick foydalanuvchilar ro'yxatini ko'rsatish",
|
||
hi_doc="सक्रिय NoNick उपयोगकर्ताओं की सूची दिखाएं",
|
||
ja_doc="アクティブなNoNickユーザーのリストを表示します",
|
||
kr_doc="활성 NoNick 사용자 목록 표시",
|
||
ar_doc="عرض قائمة مستخدمي NoNick النشطة",
|
||
es_doc="Mostrar una lista de usuarios NoNick activos",
|
||
)
|
||
async def nonickusers(self, message: Message):
|
||
"""Returns the list of NoNick users"""
|
||
users = []
|
||
for user_id in self._db.get(main.__name__, "nonickusers", []).copy():
|
||
try:
|
||
user = await self._client.get_entity(user_id)
|
||
except Exception:
|
||
self._db.set(
|
||
main.__name__,
|
||
"nonickusers",
|
||
list(
|
||
(
|
||
set(self._db.get(main.__name__, "nonickusers", []))
|
||
- {user_id}
|
||
)
|
||
),
|
||
)
|
||
|
||
logger.warning("User %s removed from nonickusers list", user_id)
|
||
continue
|
||
|
||
users += [
|
||
'▫️ <b><a href="tg://user?id={}">{}</a></b>'.format(
|
||
user_id,
|
||
utils.escape_html(get_display_name(user)),
|
||
)
|
||
]
|
||
|
||
if not users:
|
||
await utils.answer(message, self.strings("nothing"))
|
||
return
|
||
|
||
await utils.answer(
|
||
message,
|
||
self.strings("user_nn_list").format("\n".join(users)),
|
||
)
|
||
|
||
@loader.command(
|
||
ru_doc="Показать список активных NoNick чатов",
|
||
de_doc="Zeige eine Liste der aktiven NoNick Chats",
|
||
tr_doc="Etkin NoNick sohbetlerinin listesini göster",
|
||
uz_doc="Yoqilgan NoNick suhbatlar ro'yxatini ko'rsatish",
|
||
hi_doc="सक्रिय NoNick चैटों की सूची दिखाएं",
|
||
ja_doc="アクティブなNoNickチャットのリストを表示します",
|
||
kr_doc="활성 NoNick 채팅 목록 표시",
|
||
ar_doc="عرض قائمة الدردشات NoNick النشطة",
|
||
es_doc="Mostrar una lista de chats NoNick activos",
|
||
)
|
||
async def nonickchats(self, message: Message):
|
||
"""Returns the list of NoNick chats"""
|
||
chats = []
|
||
for chat in self._db.get(main.__name__, "nonickchats", []):
|
||
try:
|
||
chat_entity = await self._client.get_entity(int(chat))
|
||
except Exception:
|
||
self._db.set(
|
||
main.__name__,
|
||
"nonickchats",
|
||
list(
|
||
(set(self._db.get(main.__name__, "nonickchats", [])) - {chat})
|
||
),
|
||
)
|
||
|
||
logger.warning("Chat %s removed from nonickchats list", chat)
|
||
continue
|
||
|
||
chats += [
|
||
'▫️ <b><a href="{}">{}</a></b>'.format(
|
||
utils.get_entity_url(chat_entity),
|
||
utils.escape_html(get_display_name(chat_entity)),
|
||
)
|
||
]
|
||
|
||
if not chats:
|
||
await utils.answer(message, self.strings("nothing"))
|
||
return
|
||
|
||
await utils.answer(
|
||
message,
|
||
self.strings("user_nn_list").format("\n".join(chats)),
|
||
)
|
||
|
||
async def inline__setting(self, call: InlineCall, key: str, state: bool = False):
|
||
if callable(key):
|
||
key()
|
||
telethon.extensions.html.CUSTOM_EMOJIS = not main.get_config_key(
|
||
"disable_custom_emojis"
|
||
)
|
||
else:
|
||
self._db.set(main.__name__, key, state)
|
||
|
||
if key == "no_nickname" and state and self.get_prefix() == ".":
|
||
await call.answer(
|
||
self.strings("nonick_warning"),
|
||
show_alert=True,
|
||
)
|
||
else:
|
||
await call.answer("Configuration value saved!")
|
||
|
||
await call.edit(
|
||
self.strings("inline_settings"),
|
||
reply_markup=self._get_settings_markup(),
|
||
)
|
||
|
||
async def inline__update(
|
||
self,
|
||
call: InlineCall,
|
||
confirm_required: bool = False,
|
||
):
|
||
if confirm_required:
|
||
await call.edit(
|
||
self.strings("confirm_update"),
|
||
reply_markup=[
|
||
{"text": "🪂 Update", "callback": self.inline__update},
|
||
{"text": "🚫 Cancel", "action": "close"},
|
||
],
|
||
)
|
||
return
|
||
|
||
await call.answer("You userbot is being updated...", show_alert=True)
|
||
await call.delete()
|
||
m = await self._client.send_message("me", f"{self.get_prefix()}update --force")
|
||
await self.allmodules.commands["update"](m)
|
||
|
||
async def inline__restart(
|
||
self,
|
||
call: InlineCall,
|
||
confirm_required: bool = False,
|
||
):
|
||
if confirm_required:
|
||
await call.edit(
|
||
self.strings("confirm_restart"),
|
||
reply_markup=[
|
||
{"text": "🔄 Restart", "callback": self.inline__restart},
|
||
{"text": "🚫 Cancel", "action": "close"},
|
||
],
|
||
)
|
||
return
|
||
|
||
await call.answer("You userbot is being restarted...", show_alert=True)
|
||
await call.delete()
|
||
await self.allmodules.commands["restart"](
|
||
await self._client.send_message("me", f"{self.get_prefix()}restart --force")
|
||
)
|
||
|
||
def _get_settings_markup(self) -> list:
|
||
return [
|
||
[
|
||
(
|
||
{
|
||
"text": "✅ NoNick",
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"no_nickname",
|
||
False,
|
||
),
|
||
}
|
||
if self._db.get(main.__name__, "no_nickname", False)
|
||
else {
|
||
"text": "🚫 NoNick",
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"no_nickname",
|
||
True,
|
||
),
|
||
}
|
||
),
|
||
(
|
||
{
|
||
"text": "✅ Grep",
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"grep",
|
||
False,
|
||
),
|
||
}
|
||
if self._db.get(main.__name__, "grep", False)
|
||
else {
|
||
"text": "🚫 Grep",
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"grep",
|
||
True,
|
||
),
|
||
}
|
||
),
|
||
(
|
||
{
|
||
"text": "✅ InlineLogs",
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"inlinelogs",
|
||
False,
|
||
),
|
||
}
|
||
if self._db.get(main.__name__, "inlinelogs", True)
|
||
else {
|
||
"text": "🚫 InlineLogs",
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"inlinelogs",
|
||
True,
|
||
),
|
||
}
|
||
),
|
||
],
|
||
[
|
||
{
|
||
"text": self.strings("do_not_suggest_fs"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"disable_modules_fs",
|
||
False,
|
||
),
|
||
}
|
||
if self._db.get(main.__name__, "disable_modules_fs", False)
|
||
else {
|
||
"text": self.strings("suggest_fs"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"disable_modules_fs",
|
||
True,
|
||
),
|
||
}
|
||
],
|
||
[
|
||
(
|
||
{
|
||
"text": self.strings("use_fs"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"permanent_modules_fs",
|
||
False,
|
||
),
|
||
}
|
||
if self._db.get(main.__name__, "permanent_modules_fs", False)
|
||
else {
|
||
"text": self.strings("do_not_use_fs"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"permanent_modules_fs",
|
||
True,
|
||
),
|
||
}
|
||
),
|
||
],
|
||
[
|
||
(
|
||
{
|
||
"text": self.strings("suggest_subscribe"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"suggest_subscribe",
|
||
False,
|
||
),
|
||
}
|
||
if self._db.get(main.__name__, "suggest_subscribe", True)
|
||
else {
|
||
"text": self.strings("do_not_suggest_subscribe"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"suggest_subscribe",
|
||
True,
|
||
),
|
||
}
|
||
),
|
||
],
|
||
[
|
||
(
|
||
{
|
||
"text": self.strings("no_custom_emojis"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
lambda: main.save_config_key(
|
||
"disable_custom_emojis", False
|
||
),
|
||
),
|
||
}
|
||
if main.get_config_key("disable_custom_emojis")
|
||
else {
|
||
"text": self.strings("custom_emojis"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
lambda: main.save_config_key("disable_custom_emojis", True),
|
||
),
|
||
}
|
||
),
|
||
],
|
||
[
|
||
(
|
||
{
|
||
"text": self.strings("disable_stats"),
|
||
"callback": self.inline__setting,
|
||
"args": ("stats", False),
|
||
}
|
||
if self._db.get(main.__name__, "stats", True)
|
||
else {
|
||
"text": self.strings("enable_stats"),
|
||
"callback": self.inline__setting,
|
||
"args": (
|
||
"stats",
|
||
True,
|
||
),
|
||
}
|
||
),
|
||
],
|
||
[
|
||
{
|
||
"text": self.strings("btn_restart"),
|
||
"callback": self.inline__restart,
|
||
"args": (True,),
|
||
},
|
||
{
|
||
"text": self.strings("btn_update"),
|
||
"callback": self.inline__update,
|
||
"args": (True,),
|
||
},
|
||
],
|
||
[{"text": self.strings("close_menu"), "action": "close"}],
|
||
]
|
||
|
||
@loader.owner
|
||
@loader.command(
|
||
ru_doc="Показать настройки",
|
||
de_doc="Zeige die Einstellungen",
|
||
tr_doc="Ayarları göster",
|
||
uz_doc="Sozlamalarni ko'rsatish",
|
||
hi_doc="सेटिंग्स दिखाएं",
|
||
ja_doc="設定を表示",
|
||
kr_doc="설정 표시",
|
||
ar_doc="إظهار الإعدادات",
|
||
es_doc="Mostrar configuración",
|
||
)
|
||
async def settings(self, message: Message):
|
||
"""Show settings menu"""
|
||
await self.inline.form(
|
||
self.strings("inline_settings"),
|
||
message=message,
|
||
reply_markup=self._get_settings_markup(),
|
||
)
|
||
|
||
@loader.owner
|
||
@loader.command(
|
||
ru_doc="Открыть тоннель к веб-интерфейсу Hikka",
|
||
de_doc="Öffne einen Tunnel zum Hikka Webinterface",
|
||
tr_doc="Hikka Web Arayüzüne bir tünel aç",
|
||
uz_doc="Hikka veb-interfeysi uchun tunel ochish",
|
||
hi_doc="Hikka वेब इंटरफ़ेस के लिए ट्यूनल खोलें",
|
||
ja_doc="Hikka Webインターフェイスにトンネルを開く",
|
||
kr_doc="Hikka 웹 인터페이스에 터널 열기",
|
||
ar_doc="افتح نفقًا إلى واجهة Hikka الويب",
|
||
es_doc="Abrir un túnel al interfaz web de Hikka",
|
||
)
|
||
async def weburl(self, message: Message, force: bool = False):
|
||
"""Opens web tunnel to your Hikka web interface"""
|
||
if "LAVHOST" in os.environ:
|
||
form = await self.inline.form(
|
||
self.strings("lavhost_web"),
|
||
message=message,
|
||
reply_markup={
|
||
"text": self.strings("web_btn"),
|
||
"url": await main.hikka.web.get_url(proxy_pass=False),
|
||
},
|
||
gif="https://t.me/hikari_assets/28",
|
||
)
|
||
return
|
||
|
||
if (
|
||
not force
|
||
and not message.is_private
|
||
and "force_insecure" not in message.raw_text.lower()
|
||
):
|
||
try:
|
||
if not await self.inline.form(
|
||
self.strings("privacy_leak_nowarn").format(self._client.tg_id),
|
||
message=message,
|
||
reply_markup=[
|
||
{
|
||
"text": self.strings("btn_yes"),
|
||
"callback": self.weburl,
|
||
"args": (True,),
|
||
},
|
||
{"text": self.strings("btn_no"), "action": "close"},
|
||
],
|
||
gif="https://i.gifer.com/embedded/download/Z5tS.gif",
|
||
):
|
||
raise Exception
|
||
except Exception:
|
||
await utils.answer(
|
||
message,
|
||
self.strings("privacy_leak").format(
|
||
self._client.tg_id,
|
||
self.get_prefix(),
|
||
),
|
||
)
|
||
|
||
return
|
||
|
||
if force:
|
||
form = message
|
||
await form.edit(
|
||
self.strings("opening_tunnel"),
|
||
reply_markup={"text": "🕔 Wait...", "data": "empty"},
|
||
gif=(
|
||
"https://i.gifer.com/origin/e4/e43e1b221fd960003dc27d2f2f1b8ce1.gif"
|
||
),
|
||
)
|
||
else:
|
||
form = await self.inline.form(
|
||
self.strings("opening_tunnel"),
|
||
message=message,
|
||
reply_markup={"text": "🕔 Wait...", "data": "empty"},
|
||
gif=(
|
||
"https://i.gifer.com/origin/e4/e43e1b221fd960003dc27d2f2f1b8ce1.gif"
|
||
),
|
||
)
|
||
|
||
url = await main.hikka.web.get_url(proxy_pass=True)
|
||
|
||
await form.edit(
|
||
self.strings("tunnel_opened"),
|
||
reply_markup={"text": self.strings("web_btn"), "url": url},
|
||
gif="https://t.me/hikari_assets/48",
|
||
)
|
||
|
||
@loader.loop(interval=1, autostart=True)
|
||
async def loop(self):
|
||
obj = self.allmodules.get_approved_channel
|
||
if not obj:
|
||
return
|
||
|
||
channel, event = obj
|
||
|
||
try:
|
||
await self._client(JoinChannelRequest(channel))
|
||
except Exception:
|
||
logger.exception("Failed to join channel")
|
||
event.status = False
|
||
event.set()
|
||
else:
|
||
event.status = True
|
||
event.set()
|
||
|
||
def _get_all_IDM(self, module: str):
|
||
return {
|
||
getattr(getattr(self.lookup(module), name), "name", name): getattr(
|
||
self.lookup(module), name
|
||
)
|
||
for name in dir(self.lookup(module))
|
||
if getattr(getattr(self.lookup(module), name), "is_debug_method", False)
|
||
}
|
||
|
||
@loader.command()
|
||
async def invoke(self, message: Message):
|
||
"""<module or `core` for built-in methods> <method> - Only for debugging purposes. DO NOT USE IF YOU'RE NOT A DEVELOPER
|
||
"""
|
||
args = utils.get_args_raw(message)
|
||
if not args or len(args.split()) < 2:
|
||
await utils.answer(message, self.strings("no_args"))
|
||
return
|
||
|
||
module = args.split()[0]
|
||
method = args.split(maxsplit=1)[1]
|
||
|
||
if module != "core" and not self.lookup(module):
|
||
await utils.answer(message, self.strings("module404").format(module))
|
||
return
|
||
|
||
if (
|
||
module == "core"
|
||
and method not in ALL_INVOKES
|
||
or module != "core"
|
||
and method not in self._get_all_IDM(module)
|
||
):
|
||
await utils.answer(message, self.strings("invoke404").format(method))
|
||
return
|
||
|
||
message = await utils.answer(
|
||
message, self.strings("invoking").format(method, module)
|
||
)
|
||
result = ""
|
||
|
||
if module == "core":
|
||
if method == "clear_entity_cache":
|
||
result = (
|
||
f"Dropped {len(self._client._hikka_entity_cache)} cache records"
|
||
)
|
||
self._client._hikka_entity_cache = {}
|
||
elif method == "clear_fulluser_cache":
|
||
result = (
|
||
f"Dropped {len(self._client._hikka_fulluser_cache)} cache records"
|
||
)
|
||
self._client._hikka_fulluser_cache = {}
|
||
elif method == "clear_fullchannel_cache":
|
||
result = (
|
||
f"Dropped {len(self._client._hikka_fullchannel_cache)} cache"
|
||
" records"
|
||
)
|
||
self._client._hikka_fullchannel_cache = {}
|
||
elif method == "clear_perms_cache":
|
||
result = f"Dropped {len(self._client._hikka_perms_cache)} cache records"
|
||
self._client._hikka_perms_cache = {}
|
||
elif method == "clear_cache":
|
||
result = (
|
||
f"Dropped {len(self._client._hikka_entity_cache)} entity cache"
|
||
" records\nDropped"
|
||
f" {len(self._client._hikka_fulluser_cache)} fulluser cache"
|
||
" records\nDropped"
|
||
f" {len(self._client._hikka_fullchannel_cache)} fullchannel cache"
|
||
" records"
|
||
)
|
||
self._client._hikka_entity_cache = {}
|
||
self._client._hikka_fulluser_cache = {}
|
||
self._client._hikka_fullchannel_cache = {}
|
||
elif method == "reload_core":
|
||
core_quantity = await self.lookup("loader").reload_core()
|
||
result = f"Reloaded {core_quantity} core modules"
|
||
elif method == "inspect_cache":
|
||
result = (
|
||
"Entity cache:"
|
||
f" {len(self._client._hikka_entity_cache)} records\nFulluser cache:"
|
||
f" {len(self._client._hikka_fulluser_cache)} records\nFullchannel"
|
||
f" cache: {len(self._client._hikka_fullchannel_cache)} records"
|
||
)
|
||
elif method == "inspect_modules":
|
||
result = (
|
||
"Loaded modules: {}\nLoaded core modules: {}\nLoaded user"
|
||
" modules: {}"
|
||
).format(
|
||
len(self.allmodules.modules),
|
||
sum(
|
||
module.__origin__.startswith("<core")
|
||
for module in self.allmodules.modules
|
||
),
|
||
sum(
|
||
not module.__origin__.startswith("<core")
|
||
for module in self.allmodules.modules
|
||
),
|
||
)
|
||
else:
|
||
result = await self._get_all_IDM(module)[method](message)
|
||
|
||
await utils.answer(
|
||
message,
|
||
self.strings("invoke").format(method, utils.escape_html(result)),
|
||
)
|