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 list_of_groups(admin_id: int) -> JSONStr: """ Генерирует клавиатуру с группами, доступных пользователю для администрирования. Args: admin_id: идентификатор администратора Returns: JSONStr: Строка с клавиатурой """ kb = Keyboard() groups = admin.get_admin_feud(admin_id) for group in groups: if len(kb.buttons[-1]) == 2: kb.add_row() kb.add_text_button( group.group_num, payload={ "button": "group", "group_id": group.id }, ) 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 students(self, letter: str) -> str: data = db.students.get_list_of_students_by_letter( self.admin_id, letter) selected = db.shortcuts.get_list_of_calling_students(self.admin_id) half_index = self._find_half_index_of_letter(letter) kb = Keyboard() for item in data: if len(kb.buttons[-1]) == 2: kb.add_row() label = " " if item.id in selected: label = "✅ " kb.add_text_button( text=f"{label}{item.second_name} {item.first_name}", payload={ "button": "student", "student_id": item.id, "letter": letter, "name": f"{item.second_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()
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 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 main_menu(admin_id: int) -> JSONStr: """ Генерирует клавиатуру главного меню. Args: admin_id: Идентификатор пользователя Returns: JSONStr: Строка с клавиатурой """ is_admin = db.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": "schedule"}) if is_admin: kb.add_text_button(text="📕 Контакты", payload={"button": "contacts"}) kb.add_row() kb.add_text_button(text="⚙ Настройки", payload={"button": "settings"}) kb.add_text_button(text="🌐 Веб", payload={"button": "web"}) kb.add_row() kb.add_text_button( text="⚠ Сообщить об ошибке", payload={"button": "report_error"}, ) return kb.get_keyboard()
def public_groups(university: typing.Optional[int]): kb = Keyboard() if university is None: raise TypeError("Значение university не может быть пустым") with orm.db_session: groups = uni.get_public_groups(university) for group in groups: if len(kb.buttons[-1]) == 2: kb.add_row() kb.add_text_button( group.group_num, payload={ "button": "group", "group": group.id }, ) if kb.buttons[-1]: kb.add_row() kb.add_text_button("🚫 Отмена", payload={"button": "cancel"}) 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 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()
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, )
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 cancel(): """ Генерирует клавиатуру для отмены действия. Returns: JSONStr: клавиатура """ kb = Keyboard() kb.add_text_button("Отмена", payload={"button": "cancel"}) return kb.get_keyboard()
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 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 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 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()
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"}) 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()
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()
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 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 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 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 index_chat( chat_id: int, vk_students: t.List[int], db_students: t.List[int], ) -> JSONStr: """ Меню индексации чата. Args: chat_id: Идентификатор чата vk_students: Список студентов, присутствующих в чате db_students: Список студентов, присутствующих в БД Returns: JSONStr: Клавиатура """ kb = Keyboard() if vk_students: query = requests.post( "https://dpaste.com/api/v2/", data={ "content": ",".join(map(str, vk_students)), "syntax": { "text": "Plain " "text" }, }, ) link = query.text.strip("\n") kb.add_text_button( "➕ Зарегистрировать студентов", payload={ "button": "register_students", "chat_id": chat_id, "students": link, }, ) kb.add_row() if db_students: query = requests.post( "https://dpaste.com/api/v2/", data={ "content": ",".join(map(str, db_students)), "syntax": { "text": "Plain text" }, }, ) link = query.text.strip("\n") kb.add_text_button( "➖ Удалить студентов", payload={ "button": "purge_students", "chat_id": chat_id, "students": link, }, ) kb.add_row() kb.add_text_button( "◀️ Назад", payload={ "button": "chat", "chat_id": chat_id }, ) return kb.get_keyboard()
from vkwave.bots import Keyboard, ButtonColor DEFAULT_MARKUP = Keyboard() DEFAULT_MARKUP.add_text_button(text='Текст ➡ Аудио', color=ButtonColor.SECONDARY) DEFAULT_MARKUP.add_row() DEFAULT_MARKUP.add_text_button(text='Аудио ➡ Текст', color=ButtonColor.SECONDARY) DEFAULT_MARKUP.add_row() DEFAULT_MARKUP.add_text_button(text='Текст ➡ Аудио-мем', color=ButtonColor.SECONDARY) DEFAULT_MARKUP.add_row() DEFAULT_MARKUP.add_text_button(text='Аудио ➡ Аудио-мем', color=ButtonColor.SECONDARY) DEFAULT_MARKUP = DEFAULT_MARKUP.get_keyboard() CANCEL_MARKUP = Keyboard() CANCEL_MARKUP.add_text_button(text='Отмена', color=ButtonColor.SECONDARY) CANCEL_MARKUP = CANCEL_MARKUP.get_keyboard() MEMS_MARKUP = Keyboard() MEMS_MARKUP.add_text_button(text='🐺Цитаты Волка', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_text_button(text='🥁Бадабумц', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_row() MEMS_MARKUP.add_text_button(text='👏Falcon Punch', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_text_button(text='🏅Just do it', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_row() MEMS_MARKUP.add_text_button(text='🎂Oh shit', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_text_button(text='😔Грусть', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_row() MEMS_MARKUP.add_text_button(text='😱Просто ор', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_text_button(text='🦊Снуп Догг', color=ButtonColor.SECONDARY) MEMS_MARKUP.add_row() MEMS_MARKUP.add_text_button(text='🤖Hasta la vista, Baby', color=ButtonColor.SECONDARY) MEMS_MARKUP = MEMS_MARKUP.get_keyboard()