123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526 |
- # █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
- # █▀█ █ █ █ █▀█ █▀▄ █
- # © Copyright 2022
- # https://t.me/hikariatama
- #
- # 🔒 Licensed under the GNU AGPLv3
- # 🌐 https://www.gnu.org/licenses/agpl-3.0.html
- import os
- import telethon
- from telethon.tl.types import Message
- from telethon.extensions.html import CUSTOM_EMOJIS
- from .. import loader, main, translations, utils, version
- from ..inline.types import InlineCall
- @loader.tds
- class CoreMod(loader.Module):
- """Control core userbot settings"""
- strings = {
- "name": "Settings",
- "too_many_args": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Too many args</b>"
- ),
- "blacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Chat {} blacklisted'
- " from userbot</b>"
- ),
- "unblacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Chat {}'
- " unblacklisted from userbot</b>"
- ),
- "user_blacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>User {} blacklisted'
- " from userbot</b>"
- ),
- "user_unblacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>User {}'
- " unblacklisted from userbot</b>"
- ),
- "what_prefix": "❓ <b>What should the prefix be set to?</b>",
- "prefix_incorrect": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Prefix must be one"
- " symbol in length</b>"
- ),
- "prefix_set": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Command prefix'
- " updated. Type</b> <code>{newprefix}setprefix {oldprefix}</code> <b>to"
- " change it back</b>"
- ),
- "alias_created": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Alias created.'
- " Access it with</b> <code>{}</code>"
- ),
- "aliases": "<b>🔗 Aliases:</b>\n",
- "no_command": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Command</b>"
- " <code>{}</code> <b>does not exist</b>"
- ),
- "alias_args": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>You must provide a"
- " command and the alias for it</b>"
- ),
- "delalias_args": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>You must provide the"
- " alias name</b>"
- ),
- "alias_removed": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Alias</b>'
- " <code>{}</code> <b>removed</b>."
- ),
- "no_alias": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Alias</b>"
- " <code>{}</code> <b>does not exist</b>"
- ),
- "db_cleared": (
- '<emoji document_id="5368324170671202286">👍</emoji><b> Database cleared</b>'
- ),
- "hikka": (
- "{}\n\n<emoji document_id=5406931726184225260>🧐</emoji> <b>Version:"
- " {}.{}.{}</b>\n<emoji document_id=6318902906900711458>🧱</emoji> <b>Build:"
- " </b><i>{}</i>\n\n<emoji document_id=5233346091725888979>⚙️</emoji>"
- " <b>Hikka-TL: </b><i>{}</i>\n\n<emoji"
- " document_id=5454182070156794055>⌨️</emoji> <b>Developer:"
- " t.me/hikariatama</b>"
- ),
- "check_url": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>You need to specify"
- " valid url containing a langpack</b>"
- ),
- "lang_saved": "{} <b>Language saved!</b>",
- "pack_saved": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Translate pack'
- " saved!</b>"
- ),
- "incorrect_language": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Incorrect language"
- " specified</b>"
- ),
- "lang_removed": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Translations reset'
- " to default ones</b>"
- ),
- "check_pack": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Invalid pack format"
- " in url</b>"
- ),
- "confirm_cleardb": "⚠️ <b>Are you sure, that you want to clear database?</b>",
- "cleardb_confirm": "🗑 Clear database",
- "cancel": "🚫 Cancel",
- "who_to_blacklist": (
- "<emoji document_id=5384612769716774600>❓</emoji> <b>Who to blacklist?</b>"
- ),
- "who_to_unblacklist": (
- "<emoji document_id=5384612769716774600>❓</emoji> <b>Who to"
- " unblacklist?</b>"
- ),
- "unstable": (
- "\n\n<emoji document_id=5467370583282950466>🙈</emoji> <b>You are using an"
- " unstable branch </b><code>{}</code><b>!</b>"
- ),
- }
- strings_ru = {
- "too_many_args": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Слишком много"
- " аргументов</b>"
- ),
- "blacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Чат {} добавлен в'
- " черный список юзербота</b>"
- ),
- "unblacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Чат {} удален из'
- " черного списка юзербота</b>"
- ),
- "user_blacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Пользователь {}'
- " добавлен в черный список юзербота</b>"
- ),
- "user_unblacklisted": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Пользователь {}'
- " удален из черного списка юзербота</b>"
- ),
- "what_prefix": "❓ <b>А какой префикс ставить то?</b>",
- "prefix_incorrect": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Префикс должен"
- " состоять только из одного символа</b>"
- ),
- "prefix_set": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Префикс обновлен.'
- " Чтобы вернуть его, используй</b> <code>{newprefix}setprefix"
- " {oldprefix}</code>"
- ),
- "alias_created": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Алиас создан.'
- " Используй его через</b> <code>{}</code>"
- ),
- "aliases": "<b>🔗 Алиасы:</b>\n",
- "no_command": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Команда</b>"
- " <code>{}</code> <b>не существует</b>"
- ),
- "alias_args": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Требуется ввести"
- " команду и алиас для нее</b>"
- ),
- "delalias_args": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Требуется имя"
- " алиаса</b>"
- ),
- "alias_removed": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Алиас</b>'
- " <code>{}</code> <b>удален</b>."
- ),
- "no_alias": (
- "<emoji document_id=5436162517686557387>🚫</emoji><b> Алиас</b>"
- " <code>{}</code> <b>не существует</b>"
- ),
- "db_cleared": (
- '<emoji document_id="5368324170671202286">👍</emoji><b> База очищена</b>'
- ),
- "hikka": (
- "{}\n\n<emoji document_id=5406931726184225260>🧐</emoji> <b>Версия:"
- " {}.{}.{}</b>\n<emoji document_id=6318902906900711458>🧱</emoji> <b>Сборка:"
- " </b><i>{}</i>\n\n<emoji document_id=5233346091725888979>⚙️</emoji>"
- " <b>Hikka-TL: </b><i>{}</i>\n\n<emoji"
- " document_id=5454182070156794055>⌨️</emoji> <b>Developer:"
- " t.me/hikariatama</b>"
- ),
- "check_url": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Укажи правильную"
- " ссылку, ведущую на пак с переводом</b>"
- ),
- "lang_saved": "{} <b>Язык сохранен!</b>",
- "pack_saved": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Пак перевода'
- " сохранен!</b>"
- ),
- "incorrect_language": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>Указан неверный"
- " язык</b>"
- ),
- "lang_removed": (
- '<emoji document_id="5368324170671202286">👍</emoji> <b>Переводы'
- " сброшены</b>"
- ),
- "check_pack": (
- "<emoji document_id=5436162517686557387>🚫</emoji> <b>По ссылке находится"
- " неправильный пак</b>"
- ),
- "_cls_doc": "Управление базовыми настройками юзербота",
- "confirm_cleardb": "⚠️ <b>Вы уверены, что хотите сбросить базу данных?</b>",
- "cleardb_confirm": "🗑 Очистить базу",
- "cancel": "🚫 Отмена",
- "who_to_blacklist": (
- "<emoji document_id=5384612769716774600>❓</emoji> <b>Кого заблокировать"
- " то?</b>"
- ),
- "who_to_unblacklist": (
- "<emoji document_id=5384612769716774600>❓</emoji> <b>Кого разблокировать"
- " то?</b>"
- ),
- "unstable": (
- "\n\n<emoji document_id=5467370583282950466>🙈</emoji> <b>Ты используешь"
- " нестабильную ветку </b><code>{}</code><b>!</b>"
- ),
- }
- 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")
- async def hikkacmd(self, message: Message):
- """Get Hikka version"""
- await utils.answer(
- message,
- self.strings("hikka").format(
- (
- utils.get_platform_emoji()
- + (
- "<emoji document_id=5192756799647785066>✌️</emoji><emoji"
- " document_id=5193117564015747203>✌️</emoji><emoji"
- " document_id=5195050806105087456>✌️</emoji><emoji"
- " document_id=5195457642587233944>✌️</emoji>"
- if "LAVHOST" in os.environ
- else ""
- )
- )
- if self._client.hikka_me.premium and CUSTOM_EMOJIS
- else "🌘 <b>Hikka userbot</b>",
- *version.__version__,
- utils.get_commit_url(),
- f"{telethon.__version__} #{telethon.tl.alltlobjects.LAYER}",
- )
- + (
- ""
- if version.branch == "master"
- else self.strings("unstable").format(version.branch)
- ),
- )
- @loader.command(ru_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="[чат] - Включить бота где-либо")
- async def unblacklist(self, message: Message):
- """<chat_id> - 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):
- reply = await message.get_reply_message()
- if reply:
- return reply.sender_id
- return message.to_id.user_id if message.is_private else False
- @loader.command(ru_doc="[пользователь] - Запретить пользователю выполнять команды")
- async def blacklistuser(self, message: Message):
- """[user_id] - Prevent this user from running any commands"""
- user = await self.getuser(message)
- if not user:
- 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="[пользователь] - Разрешить пользователю выполнять команды")
- async def unblacklistuser(self, message: Message):
- """[user_id] - Allow this user to run permitted commands"""
- user = await self.getuser(message)
- if not user:
- 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.owner
- @loader.command(ru_doc="<префикс> - Установить префикс команд")
- async def setprefix(self, message: Message):
- """<prefix> - Sets command prefix"""
- args = utils.get_args_raw(message)
- if not args:
- await utils.answer(message, self.strings("what_prefix"))
- return
- if len(args) != 1:
- await utils.answer(message, self.strings("prefix_incorrect"))
- return
- oldprefix = self.get_prefix()
- self._db.set(main.__name__, "command_prefix", args)
- await utils.answer(
- message,
- self.strings("prefix_set").format(
- newprefix=utils.escape_html(args[0]),
- oldprefix=utils.escape_html(oldprefix),
- ),
- )
- @loader.owner
- @loader.command(ru_doc="Показать список алиасов")
- async def aliases(self, message: Message):
- """Print all your aliases"""
- aliases = self.allmodules.aliases
- string = self.strings("aliases")
- string += "\n".join(
- [f"▫️ <code>{i}</code> <- {y}" for i, y in aliases.items()]
- )
- await utils.answer(message, string)
- @loader.owner
- @loader.command(ru_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.owner
- @loader.command(ru_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]
- removed = self.allmodules.remove_alias(alias)
- if not removed:
- 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="[ссылка на пак] - Изменить внешний пак перевода")
- async def dllangpackcmd(self, message: Message):
- """[link to a langpack | empty to remove] - Change Hikka translate pack (external)
- """
- args = utils.get_args_raw(message)
- if not args:
- self._db.set(translations.__name__, "pack", False)
- await self.translator.init()
- await utils.answer(message, self.strings("lang_removed"))
- return
- if not utils.check_url(args):
- await utils.answer(message, self.strings("check_url"))
- return
- self._db.set(translations.__name__, "pack", args)
- success = await self.translator.init()
- await utils.answer(
- message, self.strings("pack_saved" if success else "check_pack")
- )
- @loader.command(ru_doc="[языки] - Изменить стандартный язык")
- async def setlang(self, message: Message):
- """[languages in the order of priority] - Change default language"""
- args = utils.get_args_raw(message)
- if not args or any(len(i) != 2 for i in args.split(" ")):
- await utils.answer(message, self.strings("incorrect_language"))
- return
- self._db.set(translations.__name__, "lang", args.lower())
- await self.translator.init()
- await utils.answer(
- message,
- self.strings("lang_saved").format(
- "".join(
- [
- utils.get_lang_flag(
- lang.lower() if lang.lower() != "en" else "gb"
- )
- for lang in args.lower().split(" ")
- ]
- )
- ),
- )
- @loader.owner
- @loader.command(ru_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"))
|