Spaces:
Sleeping
Sleeping
from asyncio import sleep | |
from pyrogram import filters | |
from pyrogram.types import CallbackQuery, Message | |
from Powers import LOGGER | |
from Powers.bot_class import Gojo | |
from Powers.database.lang_db import Langs | |
from Powers.tr_engine import lang_dict, tlang | |
from Powers.utils.custom_filters import admin_filter, command | |
from Powers.utils.kbhelpers import ikb | |
async def gen_langs_kb(): | |
langs = sorted(list(lang_dict.keys())) | |
return [ | |
[ | |
( | |
f"{lang_dict[lang]['main']['language_flag']} {lang_dict[lang]['main']['language_name']} ({lang_dict[lang]['main']['lang_sample']})", | |
f"set_lang.{lang}", | |
) | |
for lang in langs | |
], | |
[ | |
( | |
"π Help us with translations!", | |
"https://crowdin.com/project/gojosatarou", | |
"url", | |
), | |
], | |
] | |
async def chlang_callback(_, q: CallbackQuery): | |
kb = await gen_langs_kb() | |
kb.append([(f"Β« {(tlang(q, 'general.back_btn'))}", "start_back")]) | |
await q.message.edit_text( | |
(tlang(q, "langs.changelang")), | |
reply_markup=ikb(kb), | |
) | |
await q.answer() | |
return | |
async def close_btn_callback(_, q: CallbackQuery): | |
await q.message.delete() | |
try: | |
await q.message.reply_to_message.delete() | |
except Exception as ef: | |
LOGGER.error(f"Error: Cannot delete message\n{ef}") | |
await q.answer() | |
return | |
async def set_lang_callback(_, q: CallbackQuery): | |
lang_code = q.data.split(".")[1] | |
Langs(q.message.chat.id).set_lang(lang_code) | |
await sleep(0.1) | |
if q.message.chat.type == "private": | |
keyboard = ikb([[(f"Β« {(tlang(q, 'general.back_btn'))}", "start_back")]]) | |
else: | |
keyboard = None | |
await q.message.edit_text( | |
f"π {((tlang(q, 'langs.changed')).format(lang_code=lang_code))}", | |
reply_markup=keyboard, | |
) | |
await q.answer() | |
return | |
async def set_lang(_, m: Message): | |
args = m.text.split() | |
if len(args) > 2: | |
await m.reply_text(tlang(m, "langs.correct_usage")) | |
return | |
if len(args) == 2: | |
lang_code = args[1] | |
avail_langs = set(lang_dict.keys()) | |
if lang_code not in avail_langs: | |
await m.reply_text( | |
f"Please choose a valid language code from: {', '.join(avail_langs)}", | |
) | |
return | |
Langs(m.chat.id).set_lang(lang_code) | |
LOGGER.info(f"{m.from_user.id} change language to {lang_code} in {m.chat.id}") | |
await m.reply_text( | |
f"π {((tlang(m, 'langs.changed')).format(lang_code=lang_code))}", | |
) | |
return | |
await m.reply_text( | |
(tlang(m, "langs.changelang")), | |
reply_markup=ikb(await gen_langs_kb()), | |
) | |
return | |
__PLUGIN__ = "language" | |
__alt_name__ = ["lang", "langs", "languages"] | |
__buttons__ = [ | |
[ | |
( | |
"π Help us with translations!", | |
"https://t.me/gojo_updates", | |
"url", | |
), | |
], | |
] | |