v1.23 Верификация новых + благодарности

 НОВЫЕ ПОЛЬЗОВАТЕЛИ:
• /start - добавляет в базу и приветствует
• Может сразу отправить номер квартиры
• Стимул к верификации

 БЛАГОДАРНОСТИ:
• Показывает ВСЕХ верифицированных (не топ-100)
• Пагинация: 20 на странице
• Совет: /thank @username для поиска
• Работает с 500+ пользователями

📁 ФАЙЛЫ:
• handlers/users.py: /start добавляет, thanks pagination

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
Admin 2026-03-11 18:47:23 +00:00
parent 9cee4e8d1f
commit dc8ae8b152

View file

@ -38,8 +38,46 @@ async def cmd_start(message: Message):
user = result.scalar_one_or_none() user = result.scalar_one_or_none()
if not user: if not user:
# Пользователя нет в базе - ИГНОР! # НОВЫЙ пользователь - добавляем в базу и приветствуем!
logger.info(f'Пользователь {user_id} не в базе - игнорируем /start') user = User(
user_id=user_id,
username=message.from_user.username,
first_name=message.from_user.first_name,
last_name=message.from_user.last_name,
)
session.add(user)
await session.commit()
logger.info(f'Новый пользователь {user_id} добавлен в базу')
# Приветственное сообщение
header = '🔴 <b>ДОБРО ПОЖАЛОВАТЬ</b>'
welcome_text = f'''{header}
👋 <b>Привет, {message.from_user.first_name}!</b>
{get_level_badge("unverified")}
Я домовой бот нашего дома.
<b>ВАЖНО:</b>
Для полного доступа пройдите верификацию!
📝 <b>Как пройти верификацию:</b>
<b>1 Отправьте номер квартиры</b>
Примеры: <code>45</code>, <code>12А</code>, <code>100-1</code>
<b>2 (опционально) Телефон</b>
Пример: <code>+79991234567</code>
<b>3 Дождитесь подтверждения</b>
Админ проверит и подтвердит.
После верификации откроются все функции! 🎉'''
await message.answer(welcome_text, parse_mode='HTML', reply_markup=get_unverified_menu())
return return
# Пользователь в базе - обновляем имя # Пользователь в базе - обновляем имя
@ -702,13 +740,13 @@ async def cb_thank_user_menu(callback: CallbackQuery):
await callback.answer() await callback.answer()
async with AsyncSessionLocal() as session: async with AsyncSessionLocal() as session:
# Показываем активных пользователей (по количеству сообщений) # Показываем ВСЕХ верифицированных пользователей
stmt = select(User).order_by(desc(User.message_count)).limit(100) stmt = select(User).where(User.verified == True).order_by(desc(User.message_count))
result = await session.execute(stmt) result = await session.execute(stmt)
users = list(result.scalars().all()) users = list(result.scalars().all())
if not users: if not users:
await callback.message.answer('📭 Пользователей нет') await callback.message.answer('📭 Нет верифицированных пользователей')
return return
# Сохраняем список для сессии # Сохраняем список для сессии
@ -717,11 +755,16 @@ async def cb_thank_user_menu(callback: CallbackQuery):
'page': 0 'page': 0
} }
total_pages = (len(users) + 19) // 20
await callback.message.answer( await callback.message.answer(
'🙏 <b>Поблагодарить пользователя</b>\n\n' f'🙏 <b>Поблагодарить пользователя</b>\n\n'
'Выберите пользователя которому хотите сказать спасибо:\n' f'Всего верифицированных: {len(users)}\n'
'(+10 к рейтингу)', f'Страница 1 из {total_pages}\n\n'
reply_markup=get_thank_user_keyboard(users, page=0), f'Выберите пользователя:\n'
f'(+10 к рейтингу)\n\n'
f'💡 <b>Совет:</b> Используйте /thank @username для быстрого поиска!',
reply_markup=get_thank_user_keyboard(users, page=0, page_size=20),
parse_mode='HTML' parse_mode='HTML'
) )