File size: 6,527 Bytes
1d777c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from typing import List, Dict, Optional

try:
    import extensions.telegram_bot.source.text_process as tp
    import extensions.telegram_bot.source.const as const
    import extensions.telegram_bot.source.utils as utils
    from extensions.telegram_bot.source.conf import cfg
    from extensions.telegram_bot.source.user import User as User
except ImportError:
    import source.text_process as tp
    import source.const as const
    import source.utils as utils
    from source.conf import cfg
    from source.user import User as User


def get_options_keyboard(chat_id, user: User):
    keyboard_raw = []
    # get language
    if user is not None:
        language = user.language
    else:
        language = "en"
    language_flag = cfg.language_dict[language]
    # get voice
    if user is not None:
        voice_str = user.silero_speaker
    else:
        voice_str = "None"
    if voice_str == "None":
        voice = "🔇"
    else:
        voice = "🔈"

    if utils.check_user_rule(chat_id, const.BTN_DOWNLOAD):
        keyboard_raw.append({"text": "💾Save", "callback_data": const.BTN_DOWNLOAD})
    # if utils.check_user_rule(chat_id, const.BTN_LORE):
    #    keyboard_raw.append({
    #        text: "📜Lore", "callback_data": const.BTN_LORE}
    if utils.check_user_rule(chat_id, const.BTN_CHAR_LIST):
        keyboard_raw.append({"text": "🎭Chars", "callback_data": const.BTN_CHAR_LIST + "-9999"})
    if utils.check_user_rule(chat_id, const.BTN_RESET):
        keyboard_raw.append({"text": "⚠Reset", "callback_data": const.BTN_RESET})
    if utils.check_user_rule(chat_id, const.BTN_LANG_LIST):
        keyboard_raw.append({"text": language_flag + "Language", "callback_data": const.BTN_LANG_LIST + "0"})
    if utils.check_user_rule(chat_id, const.BTN_VOICE_LIST):
        keyboard_raw.append({"text": voice + "Voice", "callback_data": const.BTN_VOICE_LIST + "0"})
    if utils.check_user_rule(chat_id, const.BTN_PRESET_LIST) and tp.generator.generator.preset_change_allowed:
        keyboard_raw.append({"text": "🔧Presets", "callback_data": const.BTN_PRESET_LIST + "0"})
    if utils.check_user_rule(chat_id, const.BTN_MODEL_LIST) and tp.generator.generator.model_change_allowed:
        keyboard_raw.append({"text": "🔨Model", "callback_data": const.BTN_MODEL_LIST + "0"})
    if utils.check_user_rule(chat_id, const.BTN_DELETE):
        keyboard_raw.append({"text": "❌Delete", "callback_data": const.BTN_DELETE})
    return [keyboard_raw]


def get_chat_keyboard(chat_id, user: Optional[User], no_previous=False):
    keyboard_raw = []
    if utils.check_user_rule(chat_id, const.BTN_IMPERSONATE):
        keyboard_raw.append({"text": "🥸Impersonate", "callback_data": const.BTN_IMPERSONATE})
    if utils.check_user_rule(chat_id, const.BTN_NEXT):
        keyboard_raw.append({"text": "▶Next", "callback_data": const.BTN_NEXT})
    #    if utils.check_user_rule(chat_id, const.BTN_CONTINUE):
    #        keyboard_raw.append({"text": "➡Continue", "callback_data": const.BTN_CONTINUE})
    if utils.check_user_rule(chat_id, const.BTN_DEL_WORD):
        keyboard_raw.append({"text": "⬅Del sentence", "callback_data": const.BTN_DEL_WORD})
    if utils.check_user_rule(chat_id, const.BTN_PREVIOUS):
        if no_previous:
            keyboard_raw.append({"text": "-", "callback_data": "none"})
        elif user is None:
            keyboard_raw.append({"text": "-", "callback_data": "none"})
        elif len(user.msg_id) == 0:
            keyboard_raw.append({"text": "-", "callback_data": "none"})
        elif str(user.msg_id[-1]) in user.previous_history:
            keyboard_raw.append({"text": "↪️Previous variant", "callback_data": const.BTN_PREVIOUS})
        else:
            keyboard_raw.append({"text": "-", "callback_data": "none"})
    if utils.check_user_rule(chat_id, const.BTN_REGEN):
        keyboard_raw.append({"text": "🔄Regenerate", "callback_data": const.BTN_REGEN})
    if utils.check_user_rule(chat_id, const.BTN_OPTION):
        keyboard_raw.append({"text": "⚙Options", "callback_data": const.BTN_OPTION})
    if utils.check_user_rule(chat_id, const.BTN_CUTOFF):
        keyboard_raw.append({"text": "❌Delete", "callback_data": const.BTN_CUTOFF})
    return [keyboard_raw]


def get_chat_init_keyboard(chat_id=0):
    keyboard_raw = []
    if utils.check_user_rule(chat_id, const.BTN_IMPERSONATE):
        keyboard_raw.append({"text": "🥸Impersonate", "callback_data": const.BTN_IMPERSONATE_INIT})
    if utils.check_user_rule(chat_id, const.BTN_NEXT):
        keyboard_raw.append({"text": "▶Next", "callback_data": const.BTN_NEXT_INIT})
    return [keyboard_raw]


def get_switch_keyboard(
    opt_list: list,
    shift: int,
    data_list: str,
    data_load: str,
    keyboard_rows=6,
    keyboard_column=2,
):
    # find shift
    opt_list_length = len(opt_list)
    keyboard_length = keyboard_rows * keyboard_column
    if shift >= opt_list_length - keyboard_length:
        shift = opt_list_length - keyboard_length
    if shift < 0:
        shift = 0
    # append list
    characters_buttons: List[List[Dict]] = []
    column = 0
    for i in range(shift, keyboard_length + shift):
        if i >= len(opt_list):
            break
        if column == 0:
            characters_buttons.append([])
        column += 1
        if column >= keyboard_column:
            column = 0
        characters_buttons[-1].append({"text": f"{opt_list[i]}", "callback_data": f"{data_load}{str(i)}"})
        i += 1
    # add switch buttons
    ordinary_shift = keyboard_length
    improved_shift = int(opt_list_length / 8) if opt_list_length / (keyboard_length * 3) > 8 else keyboard_length * 3
    begin_shift = 0
    l_shift = shift - ordinary_shift
    l_shift3 = shift - improved_shift
    r_shift = shift + ordinary_shift
    r_shift3 = shift + improved_shift
    end_shift = opt_list_length - keyboard_length
    switch_buttons = [
        {"text": "⏮", "callback_data": data_list + str(begin_shift)},
        {"text": "⏪", "callback_data": data_list + str(l_shift3)},
        {"text": "◀", "callback_data": data_list + str(l_shift)},
        {"text": "🔺", "callback_data": data_list + const.BTN_OPTION},
        {"text": "▶", "callback_data": data_list + str(r_shift)},
        {"text": "⏩", "callback_data": data_list + str(r_shift3)},
        {"text": "⏭", "callback_data": data_list + str(end_shift)},
    ]
    characters_buttons.append(switch_buttons)
    # add new keyboard to message!
    return characters_buttons