tgadmin/bot/markups/markup.py
2024-07-25 15:19:15 +03:00

175 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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