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()
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, )
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
def cancel() -> Keyboard: """ Генерирует клавиатуру для отмены действия. Returns: Keyboard: клавиатура """ kb = Keyboard() kb.add_text_button("🚫 Отмена", payload={"button": "cancel"}) return kb
def cancel(): """ Генерирует клавиатуру для отмены действия. Returns: JSONStr: клавиатура """ kb = Keyboard() kb.add_text_button("Отмена", payload={"button": "cancel"}) return kb.get_keyboard()
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
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()
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()
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()
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()
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()
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()
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()
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(), )
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()
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
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()
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()
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()
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()
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()
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()
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()
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
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()
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()
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()
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())
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()
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()