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:
parent
9cee4e8d1f
commit
dc8ae8b152
1 changed files with 54 additions and 11 deletions
|
|
@ -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'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue