# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html import re import string from telethon.errors.rpcerrorlist import YouBlockedUserError from telethon.tl.functions.contacts import UnblockRequest from telethon.tl.types import Message from .. import loader, utils from ..inline.types import BotInlineMessage @loader.tds class InlineStuffMod(loader.Module): """Provides support for inline stuff""" strings = { "name": "InlineStuff", "bot_username_invalid": ( "🚫 Specified bot" " username is invalid. It must end with bot and contain" " at least 4 symbols" ), "bot_username_occupied": ( "🚫 This username is" " already occupied" ), "bot_updated": ( "🎉 Config successfully" " saved. Restart userbot to apply changes" ), "this_is_hikka": ( "🌘 Hi! This is Hikka — powerful modular Telegram userbot. You can" " install it to your account!\n\n🌍 GitHub\n👥 Support chat' ), } strings_ru = { "bot_username_invalid": ( "🚫 Неправильный ник" " бота. Он должен заканчиваться на bot и быть не короче" " чем 5 символов" ), "bot_username_occupied": ( "🚫 Такой ник бота уже" " занят" ), "bot_updated": ( "🎉 Настройки сохранены." " Для их применения нужно перезагрузить юзербот" ), "this_is_hikka": ( "🌘 Привет! Это Hikka — мощный модульный Telegram юзербот. Вы можете" " установить его на свой аккаунт!\n\n🌍 GitHub\n👥 Чат поддержки' ), } strings_de = { "bot_username_invalid": ( "🚫 Der angegebene" " Benutzername ist ungültig. Er muss mit bot enden und" " mindestens 4 Zeichen lang sein" ), "bot_username_occupied": ( "🚫 Dieser Benutzername" " ist bereits vergeben" ), "bot_updated": ( "🎉 Erfolgreich" " gespeichert. Starte den Userbot neu, um die Änderungen zu übernehmen" ), "this_is_hikka": ( "🌘 Hallo! Das ist Hikka — mächtiger modulare Telegram Userbot. Du kannst" " ihn auf deinen Account installieren!\n\n🌍 GitHub\n👥 Support Chat' ), } strings_tr = { "bot_username_invalid": ( "🚫 Belirtilen bot" " kullanıcı adı geçersiz. bot ile bitmelidir ve en az" " 4 karakter içermelidir" ), "bot_username_occupied": ( "🚫 Bu kullanıcı adı" " zaten alınmış" ), "bot_updated": ( "🎉 Yapılandırma başarıyla" " kaydedildi. Değişiklikleri uygulamak için botu yeniden başlatın" ), "this_is_hikka": ( "🌘 Merhaba! Bu Hikka — güçlü modüler Telegram kullanıcısı. Hesabınıza" " kurabilirsiniz!\n\n🌍 GitHub\n👥 Destek sohbeti' ), } strings_hi = { "bot_username_invalid": ( "🚫 बॉट उपयोगकर्ता" " नाम अवैध है। यह bot से समाप्त होना चाहिए और न्यूनतम" " 4 वर्णों का होना चाहिए" ), "bot_username_occupied": ( "🚫 यह उपयोगकर्ता नाम पहले" " से ही ले लिया गया है" ), "bot_updated": ( "🎉 कॉन्फ़िगरेशन" " सफलतापूर्वक सहेजा गया। इसे लागू करने के लिए बॉट को रीस्टार्ट करें" ), "this_is_hikka": ( "🌘 नमस्ते! यह Hikka है — एक मजबूत और मॉड्यूलर टेलीग्राम यूजरबॉट। आप इसे" " अपने अकाउंट पर इंस्टॉल कर सकते हैं!\n\n🌍 GitHub\n👥 सपोर्ट चैट' ), } strings_uz = { "bot_username_invalid": ( "🚫 Bot foydalanuvchi" " nomi noto'g'ri. U bot bilan tugashi kerak va kamida 4" " belgidan iborat bo'lishi kerak" ), "bot_username_occupied": ( "🚫 Ushbu foydalanuvchi" " nomi allaqachon band" ), "bot_updated": ( "🎉 Konfiguratsiya" " muvaffaqiyatli saqlandi. Ushbu o'zgarishlarni qo'llash uchun botni qayta" " ishga tushiring" ), "this_is_hikka": ( "🌘 Salom! Bu Hikka — kuchli modulyor Telegram foydalanuvchisi. Siz uni" " o'zingizga o'rnatishingiz mumkin!\n\n🌍 GitHub\n👥 Yordam chati' ), } async def watcher(self, message: Message): if ( getattr(message, "out", False) and getattr(message, "via_bot_id", False) and message.via_bot_id == self.inline.bot_id and "This message will be deleted automatically" in getattr(message, "raw_text", "") ): await message.delete() return if ( not getattr(message, "out", False) or not getattr(message, "via_bot_id", False) or message.via_bot_id != self.inline.bot_id or "Opening gallery..." not in getattr(message, "raw_text", "") ): return id_ = re.search(r"#id: ([a-zA-Z0-9]+)", message.raw_text)[1] await message.delete() m = await message.respond("🌘") await self.inline.gallery( message=m, next_handler=self.inline._custom_map[id_]["handler"], caption=self.inline._custom_map[id_].get("caption", ""), force_me=self.inline._custom_map[id_].get("force_me", False), disable_security=self.inline._custom_map[id_].get( "disable_security", False ), silent=True, ) async def _check_bot(self, username: str) -> bool: async with self._client.conversation("@BotFather", exclusive=False) as conv: try: m = await conv.send_message("/token") except YouBlockedUserError: await self._client(UnblockRequest(id="@BotFather")) m = await conv.send_message("/token") r = await conv.get_response() await m.delete() await r.delete() if not hasattr(r, "reply_markup") or not hasattr(r.reply_markup, "rows"): return False for row in r.reply_markup.rows: for button in row.buttons: if username != button.text.strip("@"): continue m = await conv.send_message("/cancel") r = await conv.get_response() await m.delete() await r.delete() return True @loader.command( ru_doc="<юзернейм> - Изменить юзернейм инлайн бота", de_doc=" - Ändere den Inline-Bot-Nutzernamen", tr_doc=" - İçe aktarma botunun kullanıcı adını değiştirin", hi_doc="<उपयोगकर्ता नाम> - इनलाइन बॉट का उपयोगकर्ता नाम बदलें", uz_doc=" - Bot foydalanuvchi nomini o'zgartiring", ) async def ch_hikka_bot(self, message: Message): """ - Change your Hikka inline bot username""" args = utils.get_args_raw(message).strip("@") if ( not args or not args.lower().endswith("bot") or len(args) <= 4 or any( litera not in (string.ascii_letters + string.digits + "_") for litera in args ) ): await utils.answer(message, self.strings("bot_username_invalid")) return try: await self._client.get_entity(f"@{args}") except ValueError: pass else: if not await self._check_bot(args): await utils.answer(message, self.strings("bot_username_occupied")) return self._db.set("hikka.inline", "custom_bot", args) self._db.set("hikka.inline", "bot_token", None) await utils.answer(message, self.strings("bot_updated")) async def aiogram_watcher(self, message: BotInlineMessage): if message.text != "/start": return await message.answer_photo( "https://github.com/hikariatama/assets/raw/master/hikka_banner.png", caption=self.strings("this_is_hikka"), ) async def client_ready(self): if self.get("migrated"): return self.set("migrated", True) async with self._client.conversation("@BotFather") as conv: for msg in [ "/cancel", "/setinline", f"@{self.inline.bot_username}", "user@hikka:~$", ]: m = await conv.send_message(msg) r = await conv.get_response() await m.delete() await r.delete()