from config import types, InlineKeyboardBuilder from filters import filtersbot from sql_function import databasework import math def start_markup(): # старт кнопки markup = ( InlineKeyboardBuilder() .button(text='Тич-Пицца', callback_data='pizza') # .button(text='Ебидоеби', callback_data='ebi') .adjust(1, repeat=True) .as_markup() ) return markup async def otdels_markup(current_page: int = 0): locations = await databasework.get_all_otdels() markup = InlineKeyboardBuilder() page_width = 10 # настройка пагинации page_offset = current_page * page_width last_page = max(0, math.ceil(len(locations) / page_width) - 1) prev_page = max(0, current_page - 1) next_page = min(last_page, current_page + 1) for i in locations[page_offset : page_offset + page_width]: name = i[1] markup.add( types.InlineKeyboardButton( text=name, callback_data=filtersbot.OtdelsMarkup(action='open', id_otdel=i[0]).pack() ) ) markup.adjust(1) # Создаем кнопки для пагинации pagination_buttons = [] if prev_page != current_page: # кнопка "Назад" pagination_buttons.append( types.InlineKeyboardButton( text="◀️", callback_data=filtersbot.PageCallback(page=prev_page, action='otdel').pack() ) ) # Кнопка для текущей страницы pagination_buttons.append( types.InlineKeyboardButton( text=f"{current_page + 1}/{last_page + 1}", callback_data='no_action' # Эта кнопка не будет выполнять действие ) ) if last_page != current_page: # кнопка "Вперед" pagination_buttons.append( types.InlineKeyboardButton( text="▶️", callback_data=filtersbot.PageCallback(page=next_page, action='otdel').pack() ) ) markup.row(*pagination_buttons) # Кнопка "В главное меню" markup.row( types.InlineKeyboardButton( text='🔙 В главное меню', callback_data='main_menu' ) ) return markup.as_markup() async def questions_markup(otdel_id: int, current_page: int = 0): locations = await databasework.get_all_questions_where_otdel_id(otdel_id) markup = InlineKeyboardBuilder() page_width = 20 # настройка пагинации page_offset = current_page * page_width last_page = max(0, math.ceil(len(locations) / page_width) - 1) prev_page = max(0, current_page - 1) next_page = min(last_page, current_page + 1) # Создаем список для хранения текста кнопок с учетом пагинации texts = [] # Номер первого вопроса на текущей странице start_index = page_offset + 1 # Добавляем кнопки с вопросами for index, i in enumerate(locations[page_offset: page_offset + page_width], start=start_index): name = i[1] text = f"{index}. {name}" # Форматируем текст с номером вопроса texts.append(text) # Сохраняем текст кнопки markup.add( types.InlineKeyboardButton( text=text, callback_data=filtersbot.QuestionsMarkup(action='open_ques', id_question=i[0], id_otdel=otdel_id).pack() ) ) # Выбираем количество кнопок в строке (2 или 3) markup.adjust(2, 3) # Создаем кнопки для пагинации pagination_buttons = [] if prev_page != current_page: # кнопка "Назад" pagination_buttons.append( types.InlineKeyboardButton( text="◀️", callback_data=filtersbot.PageCallbackQuestions(otdel_id=otdel_id, page=prev_page, action='question').pack() ) ) # Кнопка для текущей страницы pagination_buttons.append( types.InlineKeyboardButton( text=f"{current_page + 1}/{last_page + 1}", callback_data='no_action' # Эта кнопка не будет выполнять действие ) ) if last_page != current_page: # кнопка "Вперед" pagination_buttons.append( types.InlineKeyboardButton( text="▶️", callback_data=filtersbot.PageCallbackQuestions(otdel_id=otdel_id, page=next_page, action='question').pack() ) ) if last_page == current_page: markup.row( types.InlineKeyboardButton( text="Спроси HR", url="https://docs.google.com/forms/d/1jyqXjKX_MrcboWJiUOJsUIzuq_gwb_iEzwQKWqUoUPQ/edit" ) ) markup.row(*pagination_buttons) # Кнопка "Назад" markup.row( types.InlineKeyboardButton( text='🔙 Назад', callback_data='back_to_otdels' ) ) return (texts, markup.as_markup()) def back_to_questions(id_otdel: int): # старт кнопки markup = ( InlineKeyboardBuilder() .button(text='🔙 Назад', callback_data=filtersbot.BackToQuestions(id_otdel=id_otdel, action='back').pack()) .adjust(1, repeat=True) .as_markup() ) return markup