File size: 3,283 Bytes
ca4eb6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ec80725
ca4eb6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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",
            ),
        ],
    ]


@Gojo.on_callback_query(filters.regex("^chlang$"))
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


@Gojo.on_callback_query(filters.regex("^close$"), group=3)
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


@Gojo.on_callback_query(filters.regex("^set_lang."))
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


@Gojo.on_message(
    command(["lang", "setlang"]) & (admin_filter | filters.private),
    group=7,
)
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",
        ),
    ],
]