EmojiCaptchaBot/plugins/language.py

85 lines
2.6 KiB
Python

import logging
from pykeyboard import InlineButton, InlineKeyboard
from pyrogram import filters
from pyrogram.client import Client
from pyrogram.types import CallbackQuery, Message
from classes.callbacks import CallbackLanguage
from classes.pyroclient import PyroClient
from modules.utils import is_permitted
logger = logging.getLogger(__name__)
@PyroClient.on_message(
~filters.scheduled & filters.group & filters.command(["language"], prefixes=["/"]) # type: ignore
)
async def command_language(app: PyroClient, message: Message):
group = await app.find_group(message.chat.id)
locale = group.select_locale(app, message.from_user)
if not (await is_permitted(app, group, message=message)):
await message.reply_text(
app._("permission_denied", "messages", locale=locale), quote=True
)
return
keyboard = InlineKeyboard(row_width=2)
buttons = [
InlineButton(f"{data['flag']} {data['name']}", f"language:{language}")
for language, data in app.in_every_locale("metadata").items()
if data["selectable"]
]
buttons.append(
InlineButton(
f"🤖 {app._('locale_default', 'buttons', locale=locale)}", "language:default"
)
)
keyboard.add(*buttons)
await message.reply_text(
app._("locale_choice", "messages", locale=locale),
reply_markup=keyboard,
)
@Client.on_callback_query(filters.regex(r"language:[\s\S]*")) # type: ignore
async def callback_language(app: PyroClient, callback: CallbackQuery):
group = await app.find_group(callback.message.chat.id)
locale = group.select_locale(app, callback.message.from_user)
if not (await is_permitted(app, group, callback=callback)):
await callback.answer(
app._("wrong_user", "callbacks", locale=locale), show_alert=True
)
return
parsed = CallbackLanguage.from_callback(callback)
logger.info(
"Locale of group %s has been set to %s (auto: %s)",
group.id,
parsed.language,
group.locale_auto,
)
if parsed.language == "default":
await group.set_locale(None)
await callback.answer(
app._("locale_set", "callbacks", locale=app.default_locale).format(
locale=app._("locale_default", "buttons", locale=locale)
),
show_alert=True,
)
return
await group.set_locale(parsed.language)
await callback.answer(
app._("locale_set", "callbacks", locale=parsed.language).format(
locale=app._("name", "metadata", locale=parsed.language)
),
show_alert=True,
)