123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- # ©️ 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 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": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Specified bot"
- " username is invalid. It must end with</b> <code>bot</code> <b>and contain"
- " at least 4 symbols</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>This username is"
- " already occupied</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Config successfully"
- " saved. Restart userbot to apply changes</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Hi! This is Hikka — powerful modular Telegram userbot. You can"
- " install it to your account!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikaraitama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Support chat</a></b>'
- ),
- }
- strings_ru = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Неправильный ник"
- " бота. Он должен заканчиваться на</b> <code>bot</code> <b>и быть не короче"
- " чем 5 символов</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Такой ник бота уже"
- " занят</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Настройки сохранены."
- " Для их применения нужно перезагрузить юзербот</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Привет! Это Hikka — мощный модульный Telegram юзербот. Вы можете"
- " установить его на свой аккаунт!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Чат поддержки</a></b>'
- ),
- }
- strings_fr = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Nom d'utilisateur du"
- " bot incorrect. Il doit être de plus de 5 caractères et se terminer par"
- " </b> <code>bot</code>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Nom d'utilisateur du"
- " bot déjà occupé</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Paramètres"
- " enregistrés. Redémarrez le bot pour les appliquer</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Bonjour! C'est Hikka — un puissant module Telegram userbot. Vous"
- " pouvez l'installer sur votre compte!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Chat de support</a></b>'
- ),
- }
- strings_it = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Il nome utente del"
- " bot non è valido. Deve terminare con</b> <code>bot</code> <b>e contenere"
- " almeno 4 caratteri</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Questo nome utente è"
- " già occupato</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Le impostazioni sono"
- " state salvate. Riavvia il bot per applicare le modifiche</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Ciao! Questo è Hikka — potente userbot modulare per Telegram. Lo"
- " puoi installare sul tuo account!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Chat di supporto</a></b>'
- ),
- }
- strings_de = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Der angegebene"
- " Benutzername ist ungültig. Er muss mit</b> <code>bot</code> <b>enden und"
- " mindestens 4 Zeichen lang sein</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Dieser Benutzername"
- " ist bereits vergeben</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Erfolgreich"
- " gespeichert. Starte den Userbot neu, um die Änderungen zu übernehmen</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Hallo! Das ist Hikka — mächtiger modulare Telegram Userbot. Du kannst"
- " ihn auf deinen Account installieren!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Support Chat</a></b>'
- ),
- }
- strings_tr = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Belirtilen bot"
- " kullanıcı adı geçersiz. Botun adı</b> <code>bot</code> <b>ile bitmeli ve"
- " en az 4 karakter içermelidir</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Bu kullanıcı adı"
- " zaten alınmış</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Yapılandırma başarıyla"
- " kaydedildi. Değişiklikleri uygulamak için botu yeniden başlatın</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Merhaba! Bu Hikka — güçlü modüler Telegram kullanıcı botu. Hesabınıza"
- " kurup, kullanabilirsiniz!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Destek sohbeti</a></b>'
- ),
- }
- strings_uz = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Bot foydalanuvchi"
- " nomi noto'g'ri. U</b> <code>bot</code> <b>bilan tugashi kerak va kamida 4"
- " belgidan iborat bo'lishi kerak</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Ushbu foydalanuvchi"
- " nomi allaqachon band</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Konfiguratsiya"
- " muvaffaqiyatli saqlandi. Ushbu o'zgarishlarni qo'llash uchun botni qayta"
- " ishga tushiring</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Salom! Bu Hikka - kuchli modulli Telegram userboti. Siz uni"
- " o'zingizni akkauntingizga o'rnatishingiz mumkin!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Yordam chati</a></b>'
- ),
- }
- strings_es = {
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>El nombre de usuario"
- " del bot no es válido. Debe terminar con</b> <code>bot</code> <b>y"
- " tener al menos 4 caracteres</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>El nombre de usuario"
- " ya está en uso</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>La configuración se"
- " guardó correctamente. Reinicie el bot para aplicar los cambios</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>¡Hola! Este es Hikka - un poderoso bot de usuario modular de"
- " Telegram. ¡Puedes instalarlo en tu cuenta!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Chat de soporte</a></b>'
- ),
- }
- strings_kk = {
- "name": "InlineStuff",
- "bot_username_invalid": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Көрсетілген бот"
- " аты жарамсыз. Оның соңында</b> <code>bot</code> <b>қосып, 4 символдан"
- " кем болмауы керек</b>"
- ),
- "bot_username_occupied": (
- "<emoji document_id=5312526098750252863>🚫</emoji> <b>Бұл ат бос емес</b>"
- ),
- "bot_updated": (
- "<emoji document_id=6318792204118656433>🎉</emoji> <b>Баптаулар сақталды."
- " Өзгертулерді қолдану үшін ботты қайта іске қосыңыз</b>"
- ),
- "this_is_hikka": (
- "🌘 <b>Сәлеметсіз бе! Бұл Hikka — жақсы модульді Telegram бот. Сіз"
- " онды аккаунтыңызға орната аласыз!</b>\n\n<b>🌍 <a"
- ' href="https://github.com/hikariatama/Hikka">GitHub</a></b>\n<b>👥 <a'
- ' href="https://t.me/hikka_talks">Қолдау сөйлесу кезегі</a></b>'
- ),
- }
- 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("🌘", reply_to=utils.get_topic(message))
- 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="<юзернейм> - Изменить юзернейм инлайн бота",
- fr_doc="<nom d'utilisateur> - Changez le nom d'utilisateur de votre bot inline",
- it_doc="<username> - Cambia il nome utente del bot inline",
- de_doc="<username> - Ändere den Inline-Bot-Nutzernamen",
- tr_doc="<kullanıcı adı> - İçe aktarma botunun kullanıcı adını değiştirin",
- uz_doc="<foydalanuvchi nomi> - Bot foydalanuvchi nomini o'zgartiring",
- es_doc="<nombre de usuario> - Cambia el nombre de usuario del bot de inline",
- kk_doc="<пайдаланушы аты> - Инлайн боттың пайдаланушы атын өзгерту",
- )
- async def ch_hikka_bot(self, message: Message):
- """<username> - 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()
|