Heroku/hikka/modules/inline_stuff.py

284 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © 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": (
"<emoji document_id=5415905755406539934>🚫</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=5415905755406539934>🚫</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=5415905755406539934>🚫</emoji> <b>Неправильный ник"
" бота. Он должен заканчиваться на </b><code>bot</code><b> и быть не короче"
" чем 5 символов</b>"
),
"bot_username_occupied": (
"<emoji document_id=5415905755406539934>🚫</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/hikariaitama/Hikka">GitHub</a></b>\n<b>👥 <a'
' href="https://t.me/hikka_talks">Чат поддержки</a></b>'
),
}
strings_de = {
"bot_username_invalid": (
"<emoji document_id=5415905755406539934>🚫</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=5415905755406539934>🚫</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/hikariaitama/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=5415905755406539934>🚫</emoji> <b>Belirtilen bot"
" kullanıcı adı geçersiz. </b><code>bot</code><b> ile bitmelidir ve en az"
" 4 karakter içermelidir</b>"
),
"bot_username_occupied": (
"<emoji document_id=5415905755406539934>🚫</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ısı. Hesabınıza"
" kurabilirsiniz!</b>\n\n<b>🌍 <a"
' href="https://github.com/hikariaitama/Hikka">GitHub</a></b>\n<b>👥 <a'
' href="https://t.me/hikka_talks">Destek sohbeti</a></b>'
),
}
strings_hi = {
"bot_username_invalid": (
"<emoji document_id=5415905755406539934>🚫</emoji> <b>बॉट उपयोगकर्ता"
" नाम अवैध है। यह </b><code>bot</code><b> से समाप्त होना चाहिए और न्यूनतम"
" 4 वर्णों का होना चाहिए</b>"
),
"bot_username_occupied": (
"<emoji document_id=5415905755406539934>🚫</emoji> <b>यह उपयोगकर्ता नाम पहले"
" से ही ले लिया गया है</b>"
),
"bot_updated": (
"<emoji document_id=6318792204118656433>🎉</emoji> <b>कॉन्फ़िगरेशन"
" सफलतापूर्वक सहेजा गया। इसे लागू करने के लिए बॉट को रीस्टार्ट करें</b>"
),
"this_is_hikka": (
"🌘 <b>नमस्ते! यह Hikka है — एक मजबूत और मॉड्यूलर टेलीग्राम यूजरबॉट। आप इसे"
" अपने अकाउंट पर इंस्टॉल कर सकते हैं!</b>\n\n<b>🌍 <a"
' href="https://github.com/hikariaitama/Hikka">GitHub</a></b>\n<b>👥 <a'
' href="https://t.me/hikka_talks">सपोर्ट चैट</a></b>'
),
}
strings_uz = {
"bot_username_invalid": (
"<emoji document_id=5415905755406539934>🚫</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=5415905755406539934>🚫</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 modulyor Telegram foydalanuvchisi. Siz uni"
" o'zingizga o'rnatishingiz mumkin!</b>\n\n<b>🌍 <a"
' href="https://github.com/hikariaitama/Hikka">GitHub</a></b>\n<b>👥 <a'
' href="https://t.me/hikka_talks">Yordam chati</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("🌘")
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="<username> - Ändere den Inline-Bot-Nutzernamen",
tr_doc="<kullanıcı adı> - İçe aktarma botunun kullanıcı adını değiştirin",
hi_doc="<उपयोगकर्ता नाम> - इनलाइन बॉट का उपयोगकर्ता नाम बदलें",
uz_doc="<foydalanuvchi nomi> - Bot foydalanuvchi nomini o'zgartiring",
)
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()