~cytrogen/evi-run

evi-run/bot/dialogs/menu.py -rw-r--r-- 3.8 KiB
f9177ebb — Cytrogen fork: 定制修改 + 敏感数据清理 9 days 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
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
from aiogram_dialog.widgets.kbd import Button, Row, Group
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 bot.dialogs.i18n_widget import I18NFormat
from bot.states.states import Menu
from database.repositories.user import UserRepository
from bot.utils.funcs_gpt import save_user_context_txt_file, delete_user_memory, create_vectore_store


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


async def on_approve_new(callback: ChatEvent, widget: Button, manager: DialogManager):
    user_repo: UserRepository = manager.middleware_data['user_repo']
    i18n = manager.middleware_data.get('i18n')
    await user_repo.delete_chat_messages(manager.middleware_data['user'])

    await callback.answer(text=i18n.get('command_approve_new_text'), show_alert=True)
    await callback.message.delete()
    await manager.done()


async def on_approve_save(callback: ChatEvent, widget: Button, manager: DialogManager):
    user_repo: UserRepository = manager.middleware_data['user_repo']
    i18n = manager.middleware_data.get('i18n')
    is_save = await save_user_context_txt_file(user_repo, manager.middleware_data['user'])
    if not is_save:
        await callback.answer(text=i18n.get('warning_save_context_txt'), show_alert=True)
        return

    await user_repo.delete_chat_messages(manager.middleware_data['user'])

    await callback.answer(text=i18n.get('command_save_approve_kb'), show_alert=True)
    await callback.message.delete()
    await manager.done()


async def on_approve_delete(callback: ChatEvent, widget: Button, manager: DialogManager):
    i18n = manager.middleware_data.get('i18n')

    user_repo: UserRepository = manager.middleware_data['user_repo']
    await delete_user_memory(user_repo, manager.middleware_data['user'])
    await user_repo.delete_chat_messages(manager.middleware_data['user'])
    await create_vectore_store(user_repo, manager.middleware_data['user'])

    await callback.answer(text=i18n.get('command_delete_approve_text'), show_alert=True)
    await callback.message.delete()
    await manager.done()


dialog = Dialog(
    # /new
    Window(
        I18NFormat('command_new_text'),
        Row(
            Button(
                I18NFormat('command_new_approve_kb'),
                id='approve_new',
                on_click=on_approve_new
            ),
            SwitchTo(
                I18NFormat('command_new_save_kb'),
                id='st_save',
                state=Menu.save
            )
        ),
        Cancel(I18NFormat('close_kb'), id='cancel_menu', on_click=on_cancel_menu),
        state=Menu.new
    ),

    # /save
    Window(
        I18NFormat('command_save_text'),
        Group(
            Button(
                I18NFormat('command_new_approve_kb'),
                id='approve_save',
                on_click=on_approve_save
            ),
            Cancel(
                I18NFormat('close_kb'),
                id='cancel_menu',
                on_click=on_cancel_menu
            ),
            width=1
        ),
        state=Menu.save
    ),
    # /delete
    Window(
            I18NFormat('command_delete_text'),
            Group(
                Button(
                    I18NFormat('command_new_approve_kb'),
                    id='approve_del',
                    on_click=on_approve_delete
                ),
                Cancel(
                    I18NFormat('close_kb'),
                    id='cancel_del',
                    on_click=on_cancel_menu
                ),
                width=1
            ),
            state=Menu.delete
        )
)