Exemplo n.º 1
0
def main_menu(admin_id: int) -> JSONStr:
    """
    Генерирует клавиатуру главного меню.

    Args:
        admin_id: Идентификатор пользователя

    Returns:
        JSONStr: Строка с клавиатурой

    """
    is_admin = admin.is_user_admin(admin_id)
    logger.debug(f"{is_admin=}")
    kb = Keyboard()
    if is_admin:
        kb.add_text_button(text="📢 Призыв", payload={"button": "call"})
        kb.add_text_button(text="💰 Финансы", payload={"button": "finances"})
        kb.add_row()
        kb.add_text_button(text="📕 Менеджмент группы",
                           payload={"button": "group_mgmt"})
        kb.add_text_button(text="⚙ Настройки", payload={"button": "settings"})
        kb.add_row()
    kb.add_text_button(
        text="⚠ Сообщить об ошибке",
        payload={"button": "report_error"},
    )
    return kb.get_keyboard()
Exemplo n.º 2
0
async def kb_handler(event: BaseEvent):
    kb = Keyboard(one_time=True)
    kb.add_text_button(text="123456", payload={"hello": "world"})
    await event.api_ctx.messages.send(
        peer_id=event.object.object.message.peer_id,
        message="123",
        keyboard=kb.get_keyboard(),
        random_id=0,
    )
Exemplo n.º 3
0
def prompt() -> Keyboard:
    """
    Генерирует клавиатуру с подтверждением действия.

    Returns:
        Keyboard: Объект клавиатуры
    """
    kb = Keyboard()
    kb.add_text_button(text="✅ Подтвердить", payload={"button": "confirm"})
    kb.add_text_button(text="🚫 Отменить", payload={"button": "deny"})
    return kb
Exemplo n.º 4
0
def cancel() -> Keyboard:
    """
    Генерирует клавиатуру для отмены действия.

    Returns:
        Keyboard: клавиатура
    """
    kb = Keyboard()

    kb.add_text_button("🚫 Отмена", payload={"button": "cancel"})

    return kb
Exemplo n.º 5
0
def cancel():
    """
    Генерирует клавиатуру для отмены действия.

    Returns:
        JSONStr: клавиатура
    """
    kb = Keyboard()

    kb.add_text_button("Отмена", payload={"button": "cancel"})

    return kb.get_keyboard()
Exemplo n.º 6
0
async def create_current_kb(days: DAYS) -> Keyboard:
    kb = Keyboard(inline=True)
    year = datetime.datetime.now().year
    for i, day in enumerate(days, start=1):
        if i % 2 == 0:
            kb.add_row()
        kb.add_text_button(
            text=format_day(day, year),
            color=ButtonColor.SECONDARY,
            payload={"day": day},
        )
    return kb
Exemplo n.º 7
0
def skip_call_message() -> JSONStr:
    """
    Генерирует клавиатуру для пропуска ввода сообщения призыва.

    Returns:
        JSONStr: Строка с клавиатурой
    """
    kb = Keyboard()
    kb.add_text_button(text="⏩ Пропустить",
                       payload={"button": "skip_call_message"})

    kb.add_text_button(text="🚫 Отмена", payload={"button": "cancel_call"})
    return kb.get_keyboard()
Exemplo n.º 8
0
def choose_register_way() -> JSONStr:
    kb = Keyboard()

    kb.add_text_button(
        text="Новая группа",
        payload={"button": "create_new_group"},
    )
    kb.add_text_button(
        text="Существующая группа",
        payload={"button": "choose_existing_group"},
    )

    return kb.get_keyboard()
Exemplo n.º 9
0
def add_request_confirm(user_id: int):
    kb = Keyboard()
    kb.add_text_button("Добавить",
                       payload={
                           "button": "invite_user",
                           "user": user_id
                       })
    kb.add_text_button("Отклонить",
                       payload={
                           "button": "decline_user",
                           "user": user_id
                       })
    return kb.get_keyboard()
Exemplo n.º 10
0
def preferences(admin_id: int) -> JSONStr:
    """
    Возвращает клавиатуру главного окна настроек.

    Args:
        admin_id: Идентификатор администратора

    Returns:
        JSONStr: клавиатура
    """
    kb = Keyboard()
    kb.add_text_button("💬 Настроить чаты",
                       payload={"button": "configure_chats"})
    kb.add_row()

    with orm.db_session:
        feud = admin.get_admin_feud(admin_id)
        if len(feud) > 1:
            kb.add_text_button("Выбрать группу",
                               payload={"button": "select_group"})
            kb.add_row()

    kb.add_text_button("🔒 Публичность группы",
                       payload={"button": "change_publicity"})
    kb.add_row()

    kb.add_text_button("◀️ Назад", payload={"button": "main_menu"})

    return kb.get_keyboard()
Exemplo n.º 11
0
def presets():
    kb = Keyboard()

    kb.add_text_button(text="Все студенты", payload={"button": "call_all"})
    kb.add_text_button("Подгруппы", payload={"button": "subgroups"})
    kb.add_row()
    kb.add_text_button("Формы обучения",
                       payload={"button": "academic_statuses"})
    kb.add_row()
    kb.add_text_button("Пользовательские пресеты",
                       payload={"button": "custom_presets"})
    kb.add_row()
    kb.add_text_button(text="◀️ Назад",
                       payload={"button": "skip_call_message"})

    return kb.get_keyboard()
Exemplo n.º 12
0
def fin_prefs() -> JSONStr:
    """Настройки фин. категории.

    Returns:
        JSONStr: клавиатура
    """
    kb = Keyboard()

    kb.add_text_button("✏ Переименовать", payload={"button": "rename_fin_cat"})
    kb.add_text_button("💱 Изменить сумму",
                       payload={"button": "change_fin_sum"})
    kb.add_row()
    kb.add_text_button("✉ Уведомить", payload={"button": "send_fin_alert"})
    kb.add_text_button("🔥 Удалить", payload={"button": "delete_fin_cat"})
    kb.add_row()
    kb.add_text_button("◀️ Назад", payload={"button": "fin_category"})

    return kb.get_keyboard()
Exemplo n.º 13
0
    def students(self, letter: str) -> JSONStr:
        """
        Список студентов на букву.

        Args:
            letter: Первая буква фамилии для поиска студентов

        Returns:
            JSONStr: Клавиатура

        """
        with orm.db_session:
            data = students.get_list_of_students_by_letter(
                self.admin_id, letter)
            half_index = self._find_half_index_of_letter(letter)
            selected = lists.get_students_in_list(self.list_id)

            kb = Keyboard()
            for item in data:
                if len(kb.buttons[-1]) == 2:
                    kb.add_row()
                label = " "
                if item in selected:
                    label = "✅ "
                kb.add_text_button(
                    text=f"{label}{item.last_name} {item.first_name}",
                    payload={
                        "button": "student",
                        "student_id": item.id,
                        "letter": letter,
                        "name": f"{item.last_name} {item.first_name}",
                    },
                )
        if kb.buttons[-1]:
            kb.add_row()
        kb.add_text_button(
            text="◀️ Назад",
            payload={
                "button": "half",
                "half": half_index
            },
        )

        return kb.get_keyboard()
Exemplo n.º 14
0
async def bet_router(event: SimpleBotEvent):
    user: User = event["current_user"]
    bet = event.object.object.message.text
    if not bet.isdigit() or int(bet) <= 0:
        return await event.answer(message=f"Нужно число большее нуля.")
    if int(bet) > user.balance:
        return await event.answer(message=f"у вас стока нет")
    kb = Keyboard()
    kb.add_text_button("Орел", payload={"coin": "heads"})
    kb.add_text_button("Решка", payload={"coin": "tails"})
    await fsm.set_state(
        event=event,
        state=CoinState.coin,
        for_what=ForWhat.FOR_USER,
        extra_state_data={"bet": bet},
    )
    return await event.answer(
        message=f"Ставка {bet} успешно сделана. Как упадет монетка?",
        keyboard=kb.get_keyboard(),
    )
Exemplo n.º 15
0
def fin_category() -> JSONStr:
    """
    клавиатура меню категории финансов.

    Returns:
        JSONStr: клавиатура
    """
    kb = Keyboard()

    kb.add_text_button("📈 Доход", payload={"button": "add_income"})
    kb.add_text_button("📉 Расход", payload={"button": "add_expense"})
    kb.add_row()
    kb.add_text_button("💸 Должники", payload={"button": "show_debtors"})
    kb.add_text_button("📊 Статистика", payload={"button": "show_stats"})
    kb.add_row()
    kb.add_text_button("⚙ Настройки", payload={"button": "finances_pref"})
    kb.add_row()
    kb.add_text_button("◀️ Назад", payload={"button": "finances"})

    return kb.get_keyboard()
Exemplo n.º 16
0
def universities() -> Keyboard:
    kb = Keyboard()

    unies = uni.get_all()

    for university in unies:
        if len(kb.buttons[-1]) == 2:
            kb.add_row()

        kb.add_text_button(
            media.get_university_abbreviation(university.name),
            payload={
                "button": "university",
                "university": university.id,
            },
        )

    if kb.buttons[-1]:
        kb.add_row()

    return kb
Exemplo n.º 17
0
def subgroups(group_id: int):
    kb = Keyboard()

    request = list(filter(bool, groups.get_subgroups_in_group(group_id)))

    for subgroup in request:
        if len(kb.buttons[-1]) == 2:
            kb.add_row()
        kb.add_text_button(
            subgroup,
            payload={
                "button": "subgroup",
                "subgroup": subgroup,
            },
        )

    if kb.buttons[-1]:
        kb.add_row()
    kb.add_text_button(text="◀️ Назад", payload={"button": "presets"})

    return kb.get_keyboard()
Exemplo n.º 18
0
    def submenu(self, half: int) -> str:
        alphabet = students.get_unique_second_name_letters_in_a_group(
            admin.get_active_group(self.admin_id), )
        half_len = len(alphabet) // 2
        halfs = alphabet[:half_len], alphabet[half_len:]

        kb = Keyboard()

        for letter in halfs[half]:
            if len(kb.buttons[-1]) == 4:
                kb.add_row()
            kb.add_text_button(letter,
                               payload={
                                   "button": "letter",
                                   "value": letter
                               })
        if kb.buttons[-1]:
            kb.add_row()
        kb.add_text_button("◀️ Назад", payload={"button": self.return_to})

        return kb.get_keyboard()
Exemplo n.º 19
0
def index_chat(chat_id: int, ) -> JSONStr:
    """
    Меню индексации чата.

    Args:
        chat_id: Идентификатор чата

    Returns:
        JSONStr: Клавиатура
    """
    kb = Keyboard()
    kb.add_text_button(
        "➕ Зарегистрировать студентов",
        payload={
            "button": "register_students",
            "chat_id": chat_id,
        },
    )
    kb.add_row()
    kb.add_text_button(
        "➖ Удалить студентов",
        payload={
            "button": "purge_students",
            "chat_id": chat_id,
        },
    )
    kb.add_row()
    kb.add_text_button(
        "◀️ Назад",
        payload={
            "button": "chat",
            "chat_id": chat_id
        },
    )
    return kb.get_keyboard()
Exemplo n.º 20
0
def configure_chat(chat_id: int):
    """
    Меню настройки чата.

    Args:
        chat_id: Идентфикатор чата

    Returns:
        JSONStr: клавиатура
    """
    kb = Keyboard()
    kb.add_text_button(
        "🗑 Отключить чат",
        payload={
            "button": "remove_chat",
            "chat": chat_id
        },
    )
    kb.add_row()
    kb.add_text_button(
        "🗂 Индексировать чат",
        payload={
            "button": "index_chat",
            "chat": chat_id
        },
    )
    kb.add_row()
    kb.add_text_button(
        "◀️ Назад",
        payload={"button": "configure_chats"},
    )
    return kb.get_keyboard()
Exemplo n.º 21
0
def group_privacy(group_id: int) -> JSONStr:
    kb = Keyboard()

    privacy = groups.get_privacy_of_group(group_id)

    if privacy:
        kb.add_text_button(
            "🔓 Публичная",
            payload={
                "button": "change_group_privacy",
                "value": False,
            },
        )
    else:
        kb.add_text_button(
            "🔒 Приватная",
            payload={
                "button": "change_group_privacy",
                "value": True,
            },
        )

    kb.add_row()
    kb.add_text_button(
        "◀️ Назад",
        payload={"button": "main_menu"},
    )

    return kb.get_keyboard()
Exemplo n.º 22
0
def list_of_fin_categories(admin_id: int) -> JSONStr:
    """
    Генерирует клавитуру со списком финансовых категорий.

    Args:
        admin_id: Идентификатор администратора

    Returns:
        JSONStr: клавиатура
    """
    kb = Keyboard()
    with orm.db_session:
        categories = finances.get_fin_categories(
            admin.get_active_group(admin_id))
        for category in categories:
            if len(kb.buttons[-1]) == 2:
                kb.add_row()
            kb.add_text_button(
                category.name,
                payload={
                    "button": "fin_category",
                    "category": category.id
                },
            )
    if kb.buttons[-1]:
        kb.add_row()
    kb.add_text_button(
        "➕ Создать категорию",
        payload={"button": "create_finances_category"},
    )
    kb.add_row()
    kb.add_text_button("◀️ Назад", payload={"button": "main_menu"})

    return kb.get_keyboard()
Exemplo n.º 23
0
def list_of_lists(group_id: int) -> JSONStr:
    kb = Keyboard()

    with orm.db_session:
        lists_of_group = lists.get_lists_of_group(group_id)

    for lst in lists_of_group:
        if len(kb.buttons[-1]) == 2:
            kb.add_row()
        kb.add_text_button(lst.name,
                           payload={
                               "button": "list",
                               "list": lst.id
                           })

    if kb.buttons[-1]:
        kb.add_row()

    kb.add_text_button(
        text="➕ Создать список",
        payload={"button": "create_list"},
    )
    kb.add_row()
    kb.add_text_button(
        text="◀️ Назад",
        payload={"button": "group_mgmt"},
    )

    return kb.get_keyboard()
Exemplo n.º 24
0
def alphabet(admin_id: int) -> Keyboard:
    """
    Генерирует фрагмент клавиатуры с половинами алфавита фамилиий студентов.

    Args:
        admin_id: Идентификатор администратора

    Returns:
        Keyboard: Фрагмент клавиатуры
    """
    kb = Keyboard()
    alphabet = db.students.get_unique_second_name_letters_in_a_group(
        db.admin.get_active_group(admin_id), )
    half_len = len(alphabet) // 2
    f_alphabet, s_alphabet = alphabet[:half_len], alphabet[half_len:]
    index = 0
    for half in f_alphabet, s_alphabet:
        title = f"{half[0]}..{half[-1]}"
        kb.add_text_button(title, payload={"button": "half", "half": index})
        index += 1

    return kb
Exemplo n.º 25
0
def academic_statuses(group_id: int):
    kb = Keyboard()

    request = list(
        filter(bool, groups.get_academic_statuses_in_group(group_id)))

    for ac in request:
        if len(kb.buttons[-1]) == 2:
            kb.add_row()
        kb.add_text_button(
            ac.description,
            payload={
                "button": "ac_status",
                "status": ac.id,
            },
        )

    if kb.buttons[-1]:
        kb.add_row()

    kb.add_text_button(text="◀️ Назад", payload={"button": "presets"})

    return kb.get_keyboard()
Exemplo n.º 26
0
def custom_presets(group_id: int):
    kb = Keyboard()

    request = lists.get_lists_of_group(group_id)

    with orm.db_session:
        for preset in request:
            if len(kb.buttons[-1]) == 2:
                kb.add_row()
            kb.add_text_button(
                preset.name,
                payload={
                    "button": "preset",
                    "preset": preset.id,
                },
            )

    if kb.buttons[-1]:
        kb.add_row()

    kb.add_text_button(text="◀️ Назад", payload={"button": "presets"})

    return kb.get_keyboard()
Exemplo n.º 27
0
def list_menu() -> JSONStr:
    kb = Keyboard()

    kb.add_text_button("✏ Переименовать", payload={"button": "rename_list"})
    kb.add_text_button(
        "👥 Список студентов",
        payload={"button": "edit_students_in_list"},
    )
    kb.add_row()
    kb.add_text_button("🔥 Удалить список", payload={"button": "remove_list"})
    kb.add_row()
    kb.add_text_button(
        text="◀️ Назад",
        payload={"button": "lists"},
    )

    return kb.get_keyboard()
Exemplo n.º 28
0
async def kb_handler(event: BaseEvent):
    kb = Keyboard(one_time=False)

    kb.add_text_button(text='анекдот', payload={"anec": "default"})
    kb.add_text_button(text='анекдот про замая', payload={"anec": "zamai"})
    kb.add_row()
    kb.add_text_button(text='дней до школы', payload={"date": "school"})
    kb.add_text_button(text='дата регистрации', payload={"date": "reg"})

    await event.answer(message="[d34th1sn34r|боты дёшево куда угодно]",
                       keyboard=kb.get_keyboard())
Exemplo n.º 29
0
def group_menu() -> JSONStr:
    kb = Keyboard()
    kb.add_text_button(
        "👥 Студенты",
        payload={"button": "students"},
    )
    kb.add_text_button("📃 Списки", payload={"button": "lists"})
    kb.add_row()
    kb.add_text_button(
        text="◀️ Назад",
        payload={"button": "main_menu"},
    )

    return kb.get_keyboard()
Exemplo n.º 30
0
def group_privacy():
    kb = Keyboard()

    kb.add_text_button("Публичная",
                       payload={
                           "button": "group_privacy",
                           "value": False
                       })
    kb.add_text_button("Приватная",
                       payload={
                           "button": "group_privacy",
                           "value": True
                       })

    kb.add_row()

    kb.add_text_button("🚫 Отмена", payload={"button": "cancel"})

    return kb.get_keyboard()