fix: Добавлены кнопки для unverify и unverified_list

 Кнопки в inline меню админа
 Кнопки в reply меню админа
 Обработчики callback для кнопок
 Исправлено отображение команд

📦 Бекап: backups/versions/v2.1.1_buttons_fix_2026-02-28/

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
Admin 2026-02-28 20:07:16 +00:00
parent 19c5fdd0ac
commit af4e7d2c5d
3 changed files with 75 additions and 5 deletions

View file

@ -484,7 +484,7 @@ class Achievement(Base):
user_id = Column(BigInteger, ForeignKey('users.user_id'), nullable=False) user_id = Column(BigInteger, ForeignKey('users.user_id'), nullable=False)
achievement_type = Column(String(50), nullable=False) # Тип достижения achievement_type = Column(String(50), nullable=False) # Тип достижения
earned_at = Column(DateTime, default=datetime.utcnow) # Когда получено earned_at = Column(DateTime, default=datetime.utcnow) # Когда получено
metadata = Column(Text, nullable=True) # JSON с доп. данными achievement_data = Column(Text, nullable=True) # JSON с доп. данными
# Связи # Связи
user = relationship('User', backref='achievements_list') user = relationship('User', backref='achievements_list')

View file

@ -862,6 +862,68 @@ async def cb_admin_top(message: CallbackQuery):
await message.answer(text, reply_markup=get_admin_rating_menu(), parse_mode='HTML') await message.answer(text, reply_markup=get_admin_rating_menu(), parse_mode='HTML')
@router.callback_query(F.data == 'admin_help')
@admin_only
async def cb_admin_help(message: CallbackQuery):
"""Кнопка Помощь"""
text = (
'❓ <b>Помощь администратору</b>\n\n'
'<b>Основные команды:</b>\n'
'• /admin — Админ-панель\n'
'• /stats — Статистика чата\n'
'• /spies — Подозрительные пользователи\n'
'• /users — Список жильцов\n'
'• /verify — Заявки на верификацию\n'
'• /export — Экспорт данных\n'
'• /rating — Рейтинг пользователей\n'
'\n'
'<b>Инициативная группа:</b>\n'
'• /ig_add — Добавить в ИГ\n'
'• /ig_remove — Удалить из ИГ\n'
'• /ig_list — Список ИГ\n'
'• /ig_broadcast — Рассылка для ИГ\n'
'\n'
'<b>События:</b>\n'
'• /event_add — Добавить событие\n'
'• /events — Список событий\n'
'• /participants — Участники\n'
'\n'
'💡 Все команды доступны через меню!'
)
await message.message.answer(text, parse_mode='HTML')
await message.answer()
@router.callback_query(F.data == 'admin_unverify')
@admin_only
async def cb_admin_unverify(message: CallbackQuery):
"""Кнопка Отозвать верификацию"""
text = (
'🚫 <b>Отозвать верификацию</b>\n\n'
'Использование:\n'
'<code>/unverify &lt;user_id&gt; [причина]</code>\n\n'
'Пример:\n'
'<code>/unverify 123456789 Подозрение на шпиона</code>\n\n'
'💡 User ID можно узнать в /users'
)
await message.message.answer(text, parse_mode='HTML')
await message.answer()
@router.callback_query(F.data == 'admin_unverified_list')
@admin_only
async def cb_admin_unverified_list(message: CallbackQuery):
"""Кнопка Список не верифицированных"""
await message.message.answer(
'📋 <b>Список не верифицированных</b>\n\n'
'Использование:\n'
'<code>/unverified_list</code>\n\n'
'Показывает кто был лишён верификации'
)
await message.answer()
@router.callback_query(F.data == 'admin_rank') @router.callback_query(F.data == 'admin_rank')
@admin_only @admin_only
async def cb_admin_rank(message: CallbackQuery): async def cb_admin_rank(message: CallbackQuery):

View file

@ -29,6 +29,10 @@ def get_admin_main_menu() -> InlineKeyboardMarkup:
builder.row( builder.row(
InlineKeyboardButton(text='📤 Рассылка', callback_data='admin_broadcast'), InlineKeyboardButton(text='📤 Рассылка', callback_data='admin_broadcast'),
) )
builder.row(
InlineKeyboardButton(text='🚫 Отозвать вериф.', callback_data='admin_unverify'),
InlineKeyboardButton(text='📋 Список не вериф.', callback_data='admin_unverified_list'),
)
builder.row( builder.row(
InlineKeyboardButton(text='❓ Помощь', callback_data='admin_help'), InlineKeyboardButton(text='❓ Помощь', callback_data='admin_help'),
) )
@ -59,6 +63,10 @@ def get_admin_reply_menu() -> ReplyKeyboardMarkup:
builder.row( builder.row(
KeyboardButton(text='📤 Рассылка'), KeyboardButton(text='📤 Рассылка'),
) )
builder.row(
KeyboardButton(text='🚫 Отозвать вериф.'),
KeyboardButton(text='📋 Не верифицированные'),
)
builder.row( builder.row(
KeyboardButton(text='❓ Помощь'), KeyboardButton(text='❓ Помощь'),
) )