Implement user-specific question numbering and update database schema. Added triggers for automatic question numbering and adjustments upon deletion. Enhanced CRUD operations to manage user_question_number effectively.
This commit is contained in:
118
keyboards/reply.py
Normal file
118
keyboards/reply.py
Normal file
@@ -0,0 +1,118 @@
|
||||
"""
|
||||
Reply клавиатуры для бота
|
||||
"""
|
||||
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
|
||||
from aiogram.utils.keyboard import ReplyKeyboardBuilder
|
||||
from services.auth.auth_new import AuthService
|
||||
from dependencies import get_auth
|
||||
|
||||
|
||||
def get_main_keyboard(user_id: int = None, auth: AuthService = None) -> ReplyKeyboardMarkup:
|
||||
"""
|
||||
Основная клавиатура бота
|
||||
|
||||
Args:
|
||||
user_id: ID пользователя для проверки роли
|
||||
auth: Сервис авторизации для проверки роли
|
||||
|
||||
Returns:
|
||||
Reply клавиатура
|
||||
"""
|
||||
builder = ReplyKeyboardBuilder()
|
||||
|
||||
builder.add(
|
||||
KeyboardButton(text="📋 Мои вопросы"),
|
||||
KeyboardButton(text="🔗 Моя ссылка")
|
||||
)
|
||||
builder.add(
|
||||
KeyboardButton(text="🚫 Заблокированные"),
|
||||
KeyboardButton(text="ℹ️ Помощь")
|
||||
)
|
||||
|
||||
# Добавляем кнопку статистики только для администраторов
|
||||
if user_id and auth and auth.is_admin(user_id):
|
||||
builder.add(KeyboardButton(text="📊 Статистика"))
|
||||
builder.adjust(2, 2, 1) # 2 кнопки в первом ряду, 2 во втором, 1 в третьем
|
||||
else:
|
||||
builder.adjust(2, 2) # 2 кнопки в первом ряду, 2 во втором
|
||||
|
||||
return builder.as_markup(
|
||||
resize_keyboard=True,
|
||||
one_time_keyboard=False,
|
||||
input_field_placeholder="Выберите действие или отправьте вопрос..."
|
||||
)
|
||||
|
||||
|
||||
def get_main_keyboard_for_user(user_id: int, auth: AuthService = None) -> ReplyKeyboardMarkup:
|
||||
"""
|
||||
Основная клавиатура бота для конкретного пользователя
|
||||
|
||||
Args:
|
||||
user_id: ID пользователя для проверки роли
|
||||
auth: Сервис авторизации для проверки роли (опционально, если не передан, будет получен через DI)
|
||||
|
||||
Returns:
|
||||
Reply клавиатура
|
||||
"""
|
||||
if auth is None:
|
||||
auth = get_auth()
|
||||
return get_main_keyboard(user_id, auth)
|
||||
|
||||
|
||||
def get_admin_reply_keyboard() -> ReplyKeyboardMarkup:
|
||||
"""
|
||||
Reply клавиатура для администраторов
|
||||
|
||||
Returns:
|
||||
Reply клавиатура для админов
|
||||
"""
|
||||
builder = ReplyKeyboardBuilder()
|
||||
|
||||
builder.add(
|
||||
KeyboardButton(text="📋 Мои вопросы"),
|
||||
KeyboardButton(text="🔗 Моя ссылка")
|
||||
)
|
||||
builder.add(
|
||||
KeyboardButton(text="🚫 Заблокированные"),
|
||||
KeyboardButton(text="ℹ️ Помощь")
|
||||
)
|
||||
builder.add(
|
||||
KeyboardButton(text="📊 Статистика"),
|
||||
KeyboardButton(text="⚙️ Админ панель")
|
||||
)
|
||||
|
||||
builder.adjust(2, 2, 2) # 2 кнопки в каждом ряду
|
||||
|
||||
return builder.as_markup(
|
||||
resize_keyboard=True,
|
||||
one_time_keyboard=False,
|
||||
input_field_placeholder="Выберите действие или отправьте вопрос..."
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def get_cancel_keyboard() -> ReplyKeyboardMarkup:
|
||||
"""
|
||||
Клавиатура с кнопкой отмены
|
||||
|
||||
Returns:
|
||||
Reply клавиатура
|
||||
"""
|
||||
builder = ReplyKeyboardBuilder()
|
||||
|
||||
builder.add(
|
||||
KeyboardButton(text="❌ Отмена")
|
||||
)
|
||||
|
||||
return builder.as_markup(
|
||||
resize_keyboard=True,
|
||||
one_time_keyboard=True,
|
||||
input_field_placeholder="Отправьте текст или нажмите 'Отмена'"
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user