~cytrogen/evi-run

ref: be8c8546459f748da84f2defda95e570368713a7 evi-run/bot/dialogs/settings.py -rw-r--r-- 2.5 KiB
be8c8546 — Bendy feat(agent): inject runtime UTC context; fix date handling policies; adjust deep_knowledge routing 5 months ago
                                                                                
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
from aiogram_dialog.widgets.kbd import Button, Row, Group, Radio, ManagedRadio
from aiogram_dialog import Dialog, Window, ChatEvent, DialogManager
from aiogram_dialog.widgets.text import Format
from aiogram_dialog.widgets.kbd import Cancel
from aiogram_dialog.widgets.kbd import SwitchTo
from aiogram.types import CallbackQuery
from fluentogram import TranslatorHub

from bot.dialogs.i18n_widget import I18NFormat
from bot.states.states import Settings
from database.repositories.user import UserRepository
from config import AVAILABLE_LANGUAGES_WORDS, AVAILABLE_LANGUAGES


async def on_cancel_settings(callback: ChatEvent, widget: Button, manager: DialogManager):
    await callback.message.delete()


async def on_change_language(callback: CallbackQuery, select: ManagedRadio, dialog_manager: DialogManager, data):
    if data == select.get_checked():
        return
    user = dialog_manager.middleware_data['user']
    user_repo: UserRepository = dialog_manager.middleware_data['user_repo']
    await user_repo.update(user, language=data)
    translator_hub: TranslatorHub = dialog_manager.middleware_data.get('_translator_hub')

    dialog_manager.middleware_data['i18n'] = translator_hub.get_translator_by_locale(data)


dialog = Dialog(
    # /settings
    Window(
        I18NFormat('command_settings_text'),
        Group(
            SwitchTo(
                I18NFormat('settings_language_text'),
                id='settings_language',
                state=Settings.language
            ),
            Cancel(
                I18NFormat('close_kb'),
                id='cancel_settings',
                on_click=on_cancel_settings
            ),
            width=1
        ),
        state=Settings.main,
    ),
    Window(
        I18NFormat('text_choose_lang'),
        Group(
           Radio(
                checked_text=Format('✅{item[1]}'),
                unchecked_text=Format('{item[1]}'),
                id='radio_lang',
                items=[(AVAILABLE_LANGUAGES[index], i) for index, i in enumerate(AVAILABLE_LANGUAGES_WORDS)], # [('ru', '🇷🇺Русский'), ('en', '🇺🇸English')],
                item_id_getter=lambda x: x[0],
                on_click=on_change_language
           ),
           width=2
        ),
        SwitchTo(
            I18NFormat('back_kb'),
            id='back_settings',
            state=Settings.main
        ),
        Cancel(
            I18NFormat('close_kb'),
            id='cancel_settings',
            on_click=on_cancel_settings
        ),
        state=Settings.language
    ),
)