161 lines
6.9 KiB
Python
161 lines
6.9 KiB
Python
from aiogram import types
|
||
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder
|
||
|
||
|
||
def get_reply_keyboard_for_post():
|
||
builder = InlineKeyboardBuilder()
|
||
builder.row(types.InlineKeyboardButton(
|
||
text="Опубликовать", callback_data="publish"),
|
||
types.InlineKeyboardButton(
|
||
text="Отклонить", callback_data="decline")
|
||
)
|
||
builder.row(types.InlineKeyboardButton(
|
||
text="👮♂️ Забанить", callback_data="ban")
|
||
)
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|
||
|
||
|
||
def get_reply_keyboard(BotDB, user_id):
|
||
builder = ReplyKeyboardBuilder()
|
||
builder.add(types.KeyboardButton(text="📢Предложить свой пост"))
|
||
builder.add(types.KeyboardButton(text="📩Связаться с админами"))
|
||
builder.add(types.KeyboardButton(text="👋🏼Сказать пока!"))
|
||
if not BotDB.get_info_about_stickers(user_id=user_id):
|
||
builder.add(types.KeyboardButton(text="🤪Хочу стикеры"))
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|
||
|
||
|
||
def get_reply_keyboard_leave_chat():
|
||
builder = ReplyKeyboardBuilder()
|
||
builder.add(types.KeyboardButton(text="Выйти из чата"))
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|
||
|
||
|
||
def get_reply_keyboard_admin():
|
||
builder = ReplyKeyboardBuilder()
|
||
builder.add(types.KeyboardButton(text="Бан (Список)"))
|
||
builder.add(types.KeyboardButton(text="Бан по нику"))
|
||
builder.add(types.KeyboardButton(text="Бан по ID"))
|
||
builder.row()
|
||
builder.add(types.KeyboardButton(text="Разбан (список)"))
|
||
builder.add(types.KeyboardButton(text="Вернуться в бота"))
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|
||
|
||
|
||
def create_keyboard_with_pagination(page: int, total_items: int, array_items: list[tuple[any, any]], callback: str):
|
||
"""
|
||
Создает клавиатуру с пагинацией для заданного набора элементов и устанавливает необходимый callback
|
||
|
||
Args:
|
||
page: Номер текущей страницы (начинается с 1).
|
||
total_items: Общее количество элементов.
|
||
array_items: Лист кортежей. Содержит в себе user_name: user_id
|
||
callback: Действие в коллбеке. Вернет callback вида ({callback}_{user_id})
|
||
|
||
Returns:
|
||
InlineKeyboardMarkup: Клавиатура с кнопками пагинации.
|
||
"""
|
||
|
||
# Проверяем валидность входных данных
|
||
if page < 1:
|
||
page = 1
|
||
if not array_items:
|
||
# Если нет элементов, возвращаем только кнопку "Назад"
|
||
keyboard = InlineKeyboardBuilder()
|
||
home_button = types.InlineKeyboardButton(text="🏠 Назад", callback_data="return")
|
||
keyboard.row(home_button)
|
||
return keyboard.as_markup()
|
||
|
||
# Определяем общее количество страниц
|
||
items_per_page = 9
|
||
total_pages = (total_items + items_per_page - 1) // items_per_page
|
||
|
||
# Ограничиваем страницу максимальным значением
|
||
if page > total_pages:
|
||
page = total_pages
|
||
|
||
# Создаем билдер для клавиатуры
|
||
keyboard = InlineKeyboardBuilder()
|
||
|
||
# Вычисляем стартовый номер для текущей страницы
|
||
start_index = (page - 1) * items_per_page
|
||
|
||
# Кнопки с элементами текущей страницы
|
||
end_index = min(start_index + items_per_page, len(array_items))
|
||
current_row = []
|
||
|
||
for i in range(start_index, end_index):
|
||
current_row.append(types.InlineKeyboardButton(
|
||
text=f"{array_items[i][0]}", callback_data=f"{callback}_{array_items[i][1]}"
|
||
))
|
||
|
||
# Когда набирается 3 кнопки, добавляем ряд
|
||
if len(current_row) == 3:
|
||
keyboard.row(*current_row)
|
||
current_row = []
|
||
|
||
# Добавляем оставшиеся кнопки, если они есть
|
||
if current_row:
|
||
keyboard.row(*current_row)
|
||
|
||
# Создаем кнопки навигации только если нужно
|
||
navigation_buttons = []
|
||
|
||
# Кнопка "Предыдущая" - показываем только если не первая страница
|
||
if page > 1:
|
||
prev_button = types.InlineKeyboardButton(
|
||
text="⬅️ Предыдущая", callback_data=f"page_{page - 1}"
|
||
)
|
||
navigation_buttons.append(prev_button)
|
||
|
||
# Кнопка "Следующая" - показываем только если не последняя страница
|
||
if page < total_pages:
|
||
next_button = types.InlineKeyboardButton(
|
||
text="➡️ Следующая", callback_data=f"page_{page + 1}"
|
||
)
|
||
navigation_buttons.append(next_button)
|
||
|
||
# Добавляем кнопки навигации, если они есть
|
||
if navigation_buttons:
|
||
keyboard.row(*navigation_buttons)
|
||
|
||
# Кнопка "Назад"
|
||
home_button = types.InlineKeyboardButton(text="🏠 Назад", callback_data="return")
|
||
keyboard.row(home_button)
|
||
|
||
return keyboard.as_markup()
|
||
|
||
|
||
def create_keyboard_for_ban_reason():
|
||
builder = ReplyKeyboardBuilder()
|
||
builder.add(types.KeyboardButton(text="Спам"))
|
||
builder.add(types.KeyboardButton(text="Заебал стикерами"))
|
||
builder.row(types.KeyboardButton(text="Реклама здесь: @kerrad1 "))
|
||
builder.row(types.KeyboardButton(text="Тема с лагерями: https://vk.com/topic-75343895_50049913"))
|
||
builder.row(types.KeyboardButton(text="Отменить"))
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|
||
|
||
|
||
def create_keyboard_for_ban_days():
|
||
builder = ReplyKeyboardBuilder()
|
||
builder.add(types.KeyboardButton(text="1"))
|
||
builder.add(types.KeyboardButton(text="7"))
|
||
builder.add(types.KeyboardButton(text="30"))
|
||
builder.row(types.KeyboardButton(text="Навсегда"))
|
||
builder.row(types.KeyboardButton(text="Отменить"))
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|
||
|
||
|
||
def create_keyboard_for_approve_ban():
|
||
builder = ReplyKeyboardBuilder()
|
||
builder.add(types.KeyboardButton(text="Подтвердить"))
|
||
builder.add(types.KeyboardButton(text="Отменить"))
|
||
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||
return markup
|