# ©️ Dan Gazizullin, 2021-2023
# This file is a part of Hikka Userbot
# 🌐 https://github.com/hikariatama/Hikka
# You can redistribute it and/or modify it under the terms of the GNU AGPLv3
# 🔑 https://www.gnu.org/licenses/agpl-3.0.html
import string
import hikkapyro
import hikkatl
from hikkatl.extensions.html import CUSTOM_EMOJIS
from hikkatl.tl.types import Message
from .. import loader, main, utils, version
from ..compat.dragon import DRAGON_EMOJI
from ..inline.types import InlineCall
@loader.tds
class CoreMod(loader.Module):
"""Control core userbot settings"""
strings = {
"name": "Settings",
"too_many_args": (
"🚫 Too many args"
),
"blacklisted": (
"👍 Chat {} blacklisted"
" from userbot"
),
"unblacklisted": (
"👍 Chat {}"
" unblacklisted from userbot"
),
"user_blacklisted": (
"👍 User {} blacklisted"
" from userbot"
),
"user_unblacklisted": (
"👍 User {}"
" unblacklisted from userbot"
),
"what_prefix": (
"❓ What should the prefix"
" be set to?"
),
"prefix_incorrect": (
"🚫 Prefix must be one"
" symbol in length"
),
"prefix_set": (
"{} Command prefix"
" updated. Type {newprefix}setprefix {oldprefix}
to"
" change it back"
),
"alias_created": (
"👍 Alias created."
" Access it with {}
"
),
"aliases": "🔗 Aliases:\n",
"no_command": (
"🚫 Command"
" {}
does not exist"
),
"alias_args": (
"🚫 You must provide a"
" command and the alias for it"
),
"delalias_args": (
"🚫 You must provide the"
" alias name"
),
"alias_removed": (
"👍 Alias"
" {}
removed."
),
"no_alias": (
"🚫 Alias"
" {}
does not exist"
),
"db_cleared": (
"👍 Database cleared"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Developer:"
" t.me/hikariatama"
),
"confirm_cleardb": "⚠️ Are you sure, that you want to clear database?",
"cleardb_confirm": "🗑 Clear database",
"cancel": "🚫 Cancel",
"who_to_blacklist": (
"❓ Who to blacklist?"
),
"who_to_unblacklist": (
"❓ Who to"
" unblacklist?"
),
"unstable": (
"\n\n🙈 You are using an"
" unstable branch {}
!"
),
"prefix_collision": (
"💣 Your Dragon and Hikka"
" prefixes must be different!"
),
}
strings_ru = {
"too_many_args": (
"🚫 Слишком много"
" аргументов"
),
"blacklisted": (
"👍 Чат {} добавлен в"
" черный список юзербота"
),
"unblacklisted": (
"👍 Чат {} удален из"
" черного списка юзербота"
),
"user_blacklisted": (
"👍 Пользователь {}"
" добавлен в черный список юзербота"
),
"user_unblacklisted": (
"👍 Пользователь {}"
" удален из черного списка юзербота"
),
"what_prefix": (
"❓ А какой префикс"
" ставить то?"
),
"prefix_incorrect": (
"🚫 Префикс должен"
" состоять только из одного символа"
),
"prefix_set": (
"{} Префикс обновлен."
" Чтобы вернуть его, используй {newprefix}setprefix"
" {oldprefix}
"
),
"alias_created": (
"👍 Алиас создан."
" Используй его через {}
"
),
"aliases": "🔗 Алиасы:\n",
"no_command": (
"🚫 Команда"
" {}
не существует"
),
"alias_args": (
"🚫 Требуется ввести"
" команду и алиас для нее"
),
"delalias_args": (
"🚫 Требуется имя"
" алиаса"
),
"alias_removed": (
"👍 Алиас"
" {}
удален."
),
"no_alias": (
"🚫 Алиас"
" {}
не существует"
),
"db_cleared": (
"👍 База очищена"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Developer:"
" t.me/hikariatama"
),
"_cls_doc": "Управление базовыми настройками юзербота",
"confirm_cleardb": "⚠️ Вы уверены, что хотите сбросить базу данных?",
"cleardb_confirm": "🗑 Очистить базу",
"cancel": "🚫 Отмена",
"who_to_blacklist": (
"❓ Кого заблокировать"
" то?"
),
"who_to_unblacklist": (
"❓ Кого разблокировать"
" то?"
),
"unstable": (
"\n\n🙈 Ты используешь"
" нестабильную ветку {}
!"
),
"prefix_collision": (
"💣 Префиксы Dragon и"
" Hikka должны отличаться!"
),
}
strings_fr = {
"too_many_args": (
"🚫 Trop d'arguments "
),
"blacklisted": (
"👍 Le chat {} a été"
" ajouté à la liste noire du robot utilisateur"
),
"unblacklisted": (
"👍 Le chat {} a été"
" supprimé de la liste noire du robot utilisateur"
),
"user_blacklisted": (
"👍 L'utilisateur {}"
" a été ajouté à la liste noire du robot utilisateur"
),
"user_unblacklisted": (
"👍 L'utilisateur {}"
" a été supprimé de la liste noire du robot utilisateur"
),
"what_prefix": (
"❓ Et quel préfixe"
" mettre alors ?"
),
"prefix_incorrect": (
"🚫 Le préfixe doit"
" être composé d'un seul caractère"
),
"prefix_set": (
"{} Le préfixe a été mis à jour."
" Pour le rétablir, utilisez {newprefix}setprefix"
" {oldprefix}
"
),
"alias_created": (
"👍 L'alias a été créé."
" Utilisez-le avec {}
"
),
"aliases": "🔗 Alias:\n",
"no_command": (
"🚫 La commande"
" {}
n'existe pas"
),
"alias_args": (
"🚫 Vous devez entrer"
" une commande et un alias pour elle"
),
"delalias_args": (
"🚫 Vous devez entrer"
" un alias"
),
"alias_removed": (
"👍 Alias"
" {}
supprimé."
),
"no_alias": (
"🚫 Alias"
" {}
n'existe pas"
),
"db_cleared": (
"👍 Base de données"
" effacée"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Developer:"
" t.me/hikariatama"
),
"_cls_doc": "Gérer les paramètres de base du userbot",
"confirm_cleardb": (
"⚠️ Êtes-vous sûr de vouloir réinitialiser la base de données?"
),
"cleardb_confirm": "🗑 Effacer la base de données",
"cancel": "🚫 Annuler",
"who_to_blacklist": (
"❓ Qui bloquer?"
),
"who_to_unblacklist": (
"❓ Qui débloquer?"
),
"unstable": (
"\n\n🙈 Vous utilisez"
" une branche instable {}
!"
),
"prefix_collision": (
"💣 Les préfixes Dragon"
" et Hikka doivent être différents!"
),
}
strings_it = {
"too_many_args": (
"🚫 Troppi argomenti"
),
"blacklisted": (
"👍 Il gruppo {} è stato"
" aggiunto alla lista nera del bot"
),
"unblacklisted": (
"👍 Il gruppo {} è stato"
" rimosso dalla lista nera del bot"
),
"user_blacklisted": (
"👍 L'utente {} è stato"
" aggiunto alla lista nera del bot"
),
"user_unblacklisted": (
"👍 L'utente {} è stato"
" rimosso dalla lista nera del bot"
),
"what_prefix": (
"❓ Che prefisso devo"
" usare?"
),
"prefix_incorrect": (
"🚫 Il prefisso deve"
" essere di un solo carattere"
),
"prefix_set": (
"{} Il prefisso è stato aggiornato."
" Per ripristinarlo, usa {newprefix}setprefix"
" {oldprefix}
"
),
"alias_created": (
"👍 L'alias è stato"
" creato. Usa il comando con {}
"
),
"aliases": "🔗 Alias:\n",
"no_command": (
"🚫 Il comando"
" {}
non esiste"
),
"alias_args": (
"🚫 È necessario"
" specificare un comando e un alias per questo"
),
"delalias_args": (
"🚫 Nome alias"
" richiesto"
),
"alias_removed": (
"👍 Alias"
" {}
rimosso."
),
"no_alias": (
"🚫 Alias"
" {}
non esiste"
),
"db_cleared": (
"👍 Database"
" cancellato"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Developer:"
" t.me/hikariatama"
),
"_cls_doc": "Gestisci le impostazioni base del bot utente",
"confirm_cleardb": "⚠️ Sei sicuro di voler cancellare il database?",
"cleardb_confirm": "🗑 Cancella il database",
"cancel": "🚫 Annulla",
"who_to_blacklist": (
"❓ Chi vuoi bloccare?"
" "
),
"who_to_unblacklist": (
"❓ Chi vuoi sbloccare?"
" "
),
"unstable": (
"\n\n🙈 Stai usando una"
" versione instabile {}
!"
),
"prefix_collision": (
"💣 I prefissi Dragon e"
" Hikka devono essere diversi!"
),
}
strings_de = {
"too_many_args": (
"🚫 Zu vieleArgumente"
),
"blacklisted": (
"👍 Chat {} hinzugefügt"
" zuUserbot-Blacklist"
),
"unblacklisted": (
"👍 Chat {} entfernt aus"
"Blacklist für Userbots"
),
"user_blacklisted": (
"👍 Benutzer {}"
"Von Userbot auf die schwarze Liste gesetzt"
),
"user_unblacklisted": (
"👍 Benutzer {}"
" von Userbot-Blacklist entfernt"
),
"what_prefix": (
"❓ Welches Präfix soll"
" ich setzen?"
),
"prefix_incorrect": (
"🚫 Präfix muss"
"bestehen nur aus einem Zeichen"
),
"prefix_set": (
"{} Präfix aktualisiert."
" Um es zurückzugeben, verwenden Sie {newprefix}setprefix"
"{oldprefix}
"
),
"alias_created": (
"👍 Alias erstellt."
" Verwenden Sie es über {}
"
),
"aliases": "🔗 Aliasse:\n",
"no_command": (
"🚫 Befehl"
" {}
existiert nicht"
),
"alias_args": (
"🚫 Eingabe erforderlich"
"Befehl und Alias dafür"
),
"delalias_args": (
"🚫 Name erforderlich"
"alias"
),
"alias_removed": (
"👍 Alias"
" {}
gelöscht."
),
"no_alias": (
"🚫Alias"
" {}
existiert nicht"
),
"db_cleared": (
"👍Basis gelöscht"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro:"
" {}\n\n⌨️"
" Entwickler: t.me/hikariatama"
),
"_cls_doc": "Verwaltung der Grundeinstellungen des Userbots",
"confirm_cleardb": (
"⚠️ Sind Sie sicher, dass Sie die Datenbank zurücksetzen möchten?"
),
"cleardb_confirm": "🗑 Basis löschen",
"cancel": "🚫 Stornieren",
"who_to_blacklist": (
"❓ Zu blockierende"
" Personendann?"
),
"who_to_unblacklist": (
"❓ Wen entsperrendann?"
),
"unstable": (
"\n\n🙈 Sie verwenden"
"instabiler Zweig {}
!"
),
"prefix_collision": (
"💣 Präfixe"
"Dragon und Hikka müssen sich unterscheiden!"
),
}
strings_tr = {
"too_many_args": (
"🚫 Çok fazla"
" argüman var"
),
"blacklisted": (
"👍 {} adlı sohbet,"
" kullanıcı botu kara listesine eklendi"
),
"unblacklisted": (
"👍 {} adlı sohbet,"
" kullanıcı botu kara listesinden çıkartıldı"
),
"user_blacklisted": (
"👍 {} adlı kişi,"
" kullanıcı botu kara listesine eklendi"
),
"user_unblacklisted": (
"👍 {} adlı kişi,"
" kullanıcı botu kara listesine eklendi"
),
"what_prefix": (
"❓ Hangi öneki"
" ayarlamalıyım?"
),
"prefix_incorrect": (
"🚫 Önek sadece"
" bir karakterden oluşabilir"
),
"prefix_set": (
"{} Komut öneki güncellendi. Yeniden değiştirmek için"
" için, {newprefix}setprefix {oldprefix}
komutunu"
" kullanın"
),
"alias_created": (
"👍 Komut için takma ad"
" oluşturuldu. {}
komutuyla kullanabilirsiniz"
),
"aliases": "🔗 Takma adlar:\n",
"no_command": (
"🚫 Komut"
" {}
mevcut değil"
),
"alias_args": (
"🚫 Bunun için bir komut"
" ve takma ad girmeniz gerekmektedir"
),
"delalias_args": (
"🚫 Bunun için bir takma "
" ad girmeniz gerekmektedir"
),
"alias_removed": (
"👍 Takma ad"
" {}
kaldırıldı."
),
"no_alias": (
"🚫 Takma Ad"
" {}
mevcut değil"
),
"db_cleared": (
"👍 Veri Tabanı"
" sıfırlandı"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro:"
" {}\n\n⌨️"
" Geliştirici: t.me/hikariatama"
),
"_cls_doc": "Userbot temel ayar yönetimi",
"confirm_cleardb": (
"⚠️ Veritabanını sıfırlamak istediğinizden emin misiniz?"
),
"cleardb_confirm": "🗑 Veri Tabanını sıfırla",
"cancel": "🚫 İptal",
"who_to_blacklist": (
"❓ Kimler engellenir"
"sonra?"
),
"who_to_unblacklist": (
"❓ Kimin engellemesi"
" kaldırılsın?"
),
"unstable": (
"\n\n🙈 Hikka'nın kararsız"
" bir sürümü olan {}
sürümünü kullanıyorsunuz!"
),
"prefix_collision": (
"💣 Önekler çakışıyor!"
),
}
strings_uz = {
"too_many_args": (
"🚫 Juda ko'p"
" argumentlar"
),
"blacklisted": (
"👍 Chat {} qo'shildi"
" userbot qora ro' yxati"
),
"unblacklisted": (
"👍 Chat {} o'chirildi"
"Userbot qora ro'yxati"
),
"user_blacklisted": (
"👍 Foydalanuvchi {}"
" userbot tomonidan qora ro'yxatga kiritilgan"
),
"user_unblacklisted": (
"👍 Foydalanuvchi {}"
" userbot qora ro'yxatidan olib tashlandi"
),
"what_prefix": (
"❓ Qaysi prefiksni"
" o'rnatishim kerak?"
),
"prefix_incorrect": (
"🚫 Prefiks kerak"
"faqat bitta belgidan iborat"
),
"prefix_set": (
"{} Prefiks yangilandi."
" Uni qaytarish uchun {newprefix}setprefix dan foydalaning."
"{oldprefix}
"
),
"alias_created": (
"👍 Taxallus yaratildi."
" {}
orqali foydalaning"
),
"aliases": "🔗 Taxalluslar:\n",
"no_command": (
"🚫 Buyruq"
" {}
mavjud"
),
"alias_args": (
"🚫 Kirish kerak"
"buyruq va uning taxallusi"
),
"delalias_args": (
"🚫 Ism keraktaxallus"
),
"alias_removed": (
"👍 Taxallus"
" {}
o'chirildi."
),
"no_alias": (
"🚫 Taxallus"
" {}
mavjud"
),
"db_cleared": (
"👍 Baza tozalandi"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Ishlab chiquvchi:"
" t.me/hikariatama"
),
"_cls_doc": "Userbot asosiy sozlamalarini boshqarish",
"confirm_cleardb": (
"⚠️ Siz maʼlumotlar bazasini qayta o'rnatmoqchimisiz?"
),
"cleardb_confirm": "🗑 Bazani tozalash",
"cancel": "🚫 Bekor qilish",
"who_to_blacklist": (
"❓ Kimni bloklash kerak"
"keyin?"
),
"who_to_unblacklist": (
"❓ Kimni blokdan"
" chiqarish kerakkeyin?"
),
"unstable": (
"\n\n🙈 Siz"
" foydalanayotgan versiya {}
!"
),
"prefix_collision": (
"💣 Dragon va Hikka"
" prefikslari boshqacha bo'lishi kerak!"
),
}
strings_es = {
"chat_blacklisted": (
"👍 El chat {} ha sido"
" añadido a la lista negra"
),
"chat_unblacklisted": (
"👍 El chat {} ha sido"
" removido de la lista negra"
),
"user_blacklisted": (
"👍 El usuario {} ha sido"
" añadido a la lista negra"
),
"user_unblacklisted": (
"👍 El usuario {} ha sido"
" removido de la lista negra"
),
"what_prefix": (
"❓ ¿Cuál es el prefijo"
" que quieres establecer?"
),
"prefix_incorrect": (
"🚫 El prefijo debe ser"
" un solo carácter"
),
"prefix_set": (
"{} El prefijo ha sido"
" establecido. El nuevo prefijo es {newprefix}setprefix"
" {oldprefix}
para restablecerlo"
),
"alias_created": (
"👍 El alias"
" {}
ha sido creado"
),
"alias_deleted": (
"👍 El alias"
" {}
ha sido eliminado"
),
"no_alias": (
"🚫 Alias"
" {}
no existe"
),
"db_cleared": (
"👍Base de datos"
" borrada"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Desarrollador:"
" t.me/hikariatama"
),
"_cls_doc": "Los ajustes básicos del usuario del bot",
"confirm_cleardb": "⚠️ ¿Quieres borrar la base de datos?",
"cleardb_confirm": "🗑 Borrar base de datos",
"cancel": "🚫 Cancelar",
"who_to_blacklist": (
"❓ ¿Quién quieres"
" añadir a la lista negra?"
),
"who_to_unblacklist": (
"❓ ¿Quién quieres"
" eliminar de la lista negra?"
),
"unstable": (
"\n\n🙈 Estás usando la"
" rama inestable {}
!"
),
"prefix_collision": (
"💣 ¡Dragon y Hikka deben"
" tener prefijos diferentes!"
),
}
strings_kk = {
"too_many_args": (
"🚫 Тым көп"
" аргументтер"
),
"blacklisted": (
"👍 Чат {} чаттар"
"дың көрсеткішінің күйіне қосылды"
),
"unblacklisted": (
"👍 Чат {} чаттар"
"дың көрсеткішінің күйінен алынды"
),
"user_blacklisted": (
"👍 Пайдаланушы {}"
" пайдаланушылардың көрсеткішінің күйіне қосылды"
),
"user_unblacklisted": (
"👍 Пайдаланушы {}"
" пайдаланушылардың көрсеткішінің күйінен алынды"
),
"what_prefix": (
"❓ Бірақ"
" қандай әліпби беремін?"
),
"prefix_incorrect": (
"🚫 Әліпби тек"
" бір таңбадан тұруы керек"
),
"prefix_set": (
"{} Әліпби жаңартылды."
" Қайтару үшін {newprefix}setprefix {oldprefix}
"
" пайдаланыңыз"
),
"alias_created": (
"👍 Алиас жасалды."
" Оны {}
пайдаланыңыз"
),
"aliases": "🔗 Алиастар:\n",
"no_command": (
"🚫 Команда"
" {}
жоқ"
),
"alias_args": (
"🚫 Команда мен"
" оның алиасын енгізуіңіз керек"
),
"delalias_args": (
"🚫 Алиас атауы"
" енгізуіңіз керек"
),
"alias_removed": (
"👍 Алиас"
" {}
жойылды."
),
"no_alias": (
"🚫 Алиас"
" {}
жоқ"
),
"db_cleared": (
"👍 База тазаланды"
),
"hikka": (
"{} {}.{}.{} {}\n\n💜 Hikka-TL:"
" {}\n{}"
" Hikka-Pyro: {}\n\n⌨️ Әзірлеуші:"
" t.me/hikariatama"
),
"_cls_doc": "Жүйе бастапқы параметрлерін басқару",
"confirm_cleardb": (
"⚠️ Сіз дейінгі база деректерін тазалауға сенімдісіз бе?"
),
"cleardb_confirm": "🗑 База деректерін тазалау",
"cancel": "🚫 Болдырмау",
"who_to_blacklist": (
"❓ Кімді блога қою"
" керек?"
),
"who_to_unblacklist": (
"❓ Кімді блога қоюды"
" болдырмау керек?"
),
"unstable": (
"\n\n🙈 Сіз қолданбаған"
" белгісіз қосымша {}
!"
),
"prefix_collision": (
"💣 Dragon және"
" Hikka префикстері айырмасы керек!"
),
}
async def blacklistcommon(self, message: Message):
args = utils.get_args(message)
if len(args) > 2:
await utils.answer(message, self.strings("too_many_args"))
return
chatid = None
module = None
if args:
try:
chatid = int(args[0])
except ValueError:
module = args[0]
if len(args) == 2:
module = args[1]
if chatid is None:
chatid = utils.get_chat_id(message)
module = self.allmodules.get_classname(module)
return f"{str(chatid)}.{module}" if module else chatid
@loader.command(
ru_doc="Показать версию Hikka",
fr_doc="Afficher la version de Hikka",
it_doc="Mostra la versione di Hikka",
de_doc="Zeige die Hikka-Version an",
tr_doc="Hikka sürümünü gösterir",
uz_doc="Hikka versiyasini ko'rsatish",
es_doc="Mostrar la versión de Hikka",
kk_doc="Hikka нұсқасын көрсету",
tt_doc="Hikka версиясын күрсәтү",
)
async def hikkacmd(self, message: Message):
"""Get Hikka version"""
await utils.answer_file(
message,
"https://github.com/hikariatama/assets/raw/master/hikka_cat_banner.mp4",
self.strings("hikka").format(
(
utils.get_platform_emoji()
if self._client.hikka_me.premium and CUSTOM_EMOJIS
else "🌘 Hikka userbot"
),
*version.__version__,
utils.get_commit_url(),
f"{hikkatl.__version__} #{hikkatl.tl.alltlobjects.LAYER}",
(
"🔥"
if self._client.pyro_proxy
else "📴"
),
f"{hikkapyro.__version__} #{hikkapyro.raw.all.layer}",
)
+ (
""
if version.branch == "master"
else self.strings("unstable").format(version.branch)
),
)
@loader.command(
ru_doc="[чат] [модуль] - Отключить бота где-либо",
fr_doc="[chat] [module] - Désactiver le bot n'importe où",
it_doc="[chat] [module] - Disattiva il bot ovunque",
de_doc="[chat] [Modul] - Deaktiviere den Bot irgendwo",
tr_doc="[sohbet] [modül] - Botu herhangi bir yerde devre dışı bırakın",
uz_doc="[chat] [modul] - Botni hozircha o'chirish",
es_doc="[chat] [módulo] - Desactivar el bot en cualquier lugar",
kk_doc="[сөйлесу] [модуль] - Ботты қайда болса болсын өшіру",
tt_doc="[сөйләшү] [модуль] - Ботны һәр җирләгәнде өшерергә",
)
async def blacklist(self, message: Message):
"""[chat_id] [module] - Blacklist the bot from operating somewhere"""
chatid = await self.blacklistcommon(message)
self._db.set(
main.__name__,
"blacklist_chats",
self._db.get(main.__name__, "blacklist_chats", []) + [chatid],
)
await utils.answer(message, self.strings("blacklisted").format(chatid))
@loader.command(
ru_doc="[чат] - Включить бота где-либо",
fr_doc="[chat] - Activer le bot n'importe où",
it_doc="[chat] - Attiva il bot ovunque",
de_doc="[chat] - Aktiviere den Bot irgendwo",
tr_doc="[sohbet] - Botu herhangi bir yerde etkinleştirin",
uz_doc="[chat] - Botni hozircha yoqish",
es_doc="[chat] - Activar el bot en cualquier lugar",
kk_doc="[сөйлесу] - Ботты қайда болса болсын қосу",
tt_doc="[сөйләшү] - Ботны һәр җирләгәнде җибәрергә",
)
async def unblacklist(self, message: Message):
""" - Unblacklist the bot from operating somewhere"""
chatid = await self.blacklistcommon(message)
self._db.set(
main.__name__,
"blacklist_chats",
list(set(self._db.get(main.__name__, "blacklist_chats", [])) - {chatid}),
)
await utils.answer(message, self.strings("unblacklisted").format(chatid))
async def getuser(self, message: Message):
try:
return int(utils.get_args(message)[0])
except (ValueError, IndexError):
if reply := await message.get_reply_message():
return reply.sender_id
return message.to_id.user_id if message.is_private else False
@loader.command(
ru_doc="[пользователь] - Запретить пользователю выполнять команды",
fr_doc="[utilisateur] - Interdire à l'utilisateur d'exécuter des commandes",
it_doc="[utente] - Impedisci all'utente di eseguire comandi",
de_doc="[Benutzer] - Verbiete dem Benutzer, Befehle auszuführen",
tr_doc="[kullanıcı] - Kullanıcıya komutları yürütmeyi yasakla",
uz_doc="[foydalanuvchi] - Foydalanuvchiga buyruqlarni bajarishni taqiqlash",
es_doc="[usuario] - Prohibir al usuario ejecutar comandos",
kk_doc="[пайдаланушы] - Пайдаланушыға командаларды орындауға рұқсат бермеу",
tt_doc="[кулланучы] - Кулланучыга командаларны орындауға рөхсәт бирмәү",
)
async def blacklistuser(self, message: Message):
"""[user_id] - Prevent this user from running any commands"""
if not (user := await self.getuser(message)):
await utils.answer(message, self.strings("who_to_blacklist"))
return
self._db.set(
main.__name__,
"blacklist_users",
self._db.get(main.__name__, "blacklist_users", []) + [user],
)
await utils.answer(message, self.strings("user_blacklisted").format(user))
@loader.command(
ru_doc="[пользователь] - Разрешить пользователю выполнять команды",
fr_doc="[utilisateur] - Autoriser l'utilisateur à exécuter des commandes",
it_doc="[utente] - Consenti all'utente di eseguire comandi",
de_doc="[Benutzer] - Erlaube dem Benutzer, Befehle auszuführen",
tr_doc="[kullanıcı] - Kullanıcıya komutları yürütmeyi yasakla",
uz_doc="[foydalanuvchi] - Foydalanuvchiga buyruqlarni bajarishni taqiqlash",
es_doc="[usuario] - Prohibir al usuario ejecutar comandos",
kk_doc="[пайдаланушы] - Пайдаланушыға командаларды орындауға рұқсат бермеу",
tt_doc="[кулланучы] - Кулланучыга командаларны орындауға рөхсәт бирмәү",
)
async def unblacklistuser(self, message: Message):
"""[user_id] - Allow this user to run permitted commands"""
if not (user := await self.getuser(message)):
await utils.answer(message, self.strings("who_to_unblacklist"))
return
self._db.set(
main.__name__,
"blacklist_users",
list(set(self._db.get(main.__name__, "blacklist_users", [])) - {user}),
)
await utils.answer(
message,
self.strings("user_unblacklisted").format(user),
)
@loader.command(
ru_doc="[dragon] <префикс> - Установить префикс команд",
fr_doc="[dragon] - Définir le préfixe des commandes",
it_doc="[dragon] - Imposta il prefisso dei comandi",
de_doc="[dragon] - Setze das Befehlspräfix",
tr_doc="[dragon] <önek> - Komut öneki ayarla",
uz_doc="[dragon] - Buyruqlar uchun avvalgi belgilash",
es_doc="[dragon] - Establecer el prefijo de comandos",
kk_doc="[dragon] <бастауыш> - Командалардың бастауышын орнату",
tt_doc="[dragon] <башкача> - Командаларның башкачасын орнату",
)
async def setprefix(self, message: Message):
"""[dragon] - Sets command prefix"""
if not (args := utils.get_args_raw(message)):
await utils.answer(message, self.strings("what_prefix"))
return
if len(args.split()) == 2 and args.split()[0] == "dragon":
args = args.split()[1]
is_dragon = True
else:
is_dragon = False
if len(args) != 1:
await utils.answer(message, self.strings("prefix_incorrect"))
return
if args == "s":
await utils.answer(message, self.strings("prefix_incorrect"))
return
if (
not is_dragon
and args[0] == self._db.get("dragon.prefix", "command_prefix", ",")
or is_dragon
and args[0] == self._db.get(main.__name__, "command_prefix", ".")
):
await utils.answer(message, self.strings("prefix_collision"))
return
oldprefix = (
f"dragon {utils.escape_html(self.get_prefix('dragon'))}"
if is_dragon
else utils.escape_html(self.get_prefix())
)
self._db.set(
"dragon.prefix" if is_dragon else main.__name__,
"command_prefix",
args,
)
await utils.answer(
message,
self.strings("prefix_set").format(
(
DRAGON_EMOJI
if is_dragon
else "👍"
),
newprefix=utils.escape_html(
self.get_prefix() if is_dragon else args[0]
),
oldprefix=utils.escape_html(oldprefix),
),
)
@loader.command(
ru_doc="Показать список алиасов",
fr_doc="Afficher la liste des alias",
it_doc="Mostra la lista degli alias",
de_doc="Zeige Aliase",
tr_doc="Takma adları göster",
uz_doc="Aliaslarni ko'rsatish",
es_doc="Mostrar lista de alias",
kk_doc="Айланыстарды көрсету",
tt_doc="Алиаслар тизмесен күрсәтү",
)
async def aliases(self, message: Message):
"""Print all your aliases"""
await utils.answer(
message,
self.strings("aliases")
+ "\n".join(
[
f"▫️ {i}
<- {y}"
for i, y in self.allmodules.aliases.items()
]
),
)
@loader.command(
ru_doc="Установить алиас для команды",
fr_doc="Définir un alias pour la commande",
it_doc="Imposta un alias per il comando",
de_doc="Setze einen Alias für einen Befehl",
tr_doc="Bir komut için takma ad ayarla",
uz_doc="Buyrug' uchun alias belgilash",
es_doc="Establecer alias para el comando",
kk_doc="Команда үшін айланыс орнату",
tt_doc="Команда үчен алиас күрсәтү",
)
async def addalias(self, message: Message):
"""Set an alias for a command"""
args = utils.get_args(message)
if len(args) != 2:
await utils.answer(message, self.strings("alias_args"))
return
alias, cmd = args
if self.allmodules.add_alias(alias, cmd):
self.set(
"aliases",
{
**self.get("aliases", {}),
alias: cmd,
},
)
await utils.answer(
message,
self.strings("alias_created").format(utils.escape_html(alias)),
)
else:
await utils.answer(
message,
self.strings("no_command").format(utils.escape_html(cmd)),
)
@loader.command(
ru_doc="Удалить алиас для команды",
fr_doc="Supprimer un alias pour la commande",
it_doc="Rimuovi un alias per il comando",
de_doc="Entferne einen Alias für einen Befehl",
tr_doc="Bir komut için takma ad kaldır",
uz_doc="Buyrug' uchun aliasni o'chirish",
es_doc="Eliminar alias para el comando",
kk_doc="Команда үшін айланысты жою",
tt_doc="Команда үчен алиасны юйү",
)
async def delalias(self, message: Message):
"""Remove an alias for a command"""
args = utils.get_args(message)
if len(args) != 1:
await utils.answer(message, self.strings("delalias_args"))
return
alias = args[0]
if not self.allmodules.remove_alias(alias):
await utils.answer(
message,
self.strings("no_alias").format(utils.escape_html(alias)),
)
return
current = self.get("aliases", {})
del current[alias]
self.set("aliases", current)
await utils.answer(
message,
self.strings("alias_removed").format(utils.escape_html(alias)),
)
@loader.command(
ru_doc="Очистить базу данных",
fr_doc="Vider la base de données",
it_doc="Cancella il database",
de_doc="Datenbank leeren",
tr_doc="Veritabanını temizle",
uz_doc="Ma'lumotlar bazasini tozalash",
es_doc="Limpiar la base de datos",
kk_doc="Деректер базасын тазалау",
tt_doc="Мәгълүмат базасын тазалау",
)
async def cleardb(self, message: Message):
"""Clear the entire database, effectively performing a factory reset"""
await self.inline.form(
self.strings("confirm_cleardb"),
message,
reply_markup=[
{
"text": self.strings("cleardb_confirm"),
"callback": self._inline__cleardb,
},
{
"text": self.strings("cancel"),
"action": "close",
},
],
)
async def _inline__cleardb(self, call: InlineCall):
self._db.clear()
self._db.save()
await utils.answer(call, self.strings("db_cleared"))