✨ Реализованы все улучшения функционала бота
Блок 1: Система никнеймов - ✅ Добавлено поле nickname в модель User - ✅ Создана миграция для nickname - ✅ Обновлена регистрация (3 шага: nickname → карта → телефон) - ✅ Валидация nickname (длина 2-20, проверка служебных слов) - ✅ Подписи в чате используют nickname Блок 2: Админские функции - ✅ Массовая рассылка (кнопка в админке, поддержка текста/фото/видео/документов) - ✅ Экспорт пользователей в JSON (бэкап с метаданными) - ✅ Импорт пользователей из JSON (восстановление с обновлением) Блок 3: Улучшения розыгрышей - ✅ Рассылка результатов розыгрыша всем участникам (кроме победителей) - ✅ Сообщения подтверждения показывают nickname + клубную карту - ✅ Ручное назначение победителя по номеру счета/telegram ID/username
This commit is contained in:
@@ -356,9 +356,29 @@ async def confirm_winner_callback(callback_query):
|
||||
winner.claimed_at = datetime.now(timezone.utc)
|
||||
await session.commit()
|
||||
|
||||
# Получаем данные о розыгрыше
|
||||
# Получаем данные о розыгрыше и пользователе
|
||||
lottery = await LotteryService.get_lottery(session, winner.lottery_id)
|
||||
|
||||
# Получаем информацию о пользователе
|
||||
owner = None
|
||||
if winner.account_number:
|
||||
owner = await AccountService.get_account_owner(session, winner.account_number)
|
||||
elif winner.user_id:
|
||||
user_result = await session.execute(
|
||||
select(User).where(User.id == winner.user_id)
|
||||
)
|
||||
owner = user_result.scalar_one_or_none()
|
||||
|
||||
# Формируем отображаемое имя
|
||||
display_name = "Пользователь"
|
||||
if owner:
|
||||
if owner.nickname:
|
||||
display_name = owner.nickname
|
||||
elif owner.username:
|
||||
display_name = f"@{owner.username}"
|
||||
elif owner.first_name:
|
||||
display_name = owner.first_name
|
||||
|
||||
# Отправляем подтверждение пользователю
|
||||
confirmation_text = (
|
||||
f"✅ **Выигрыш подтвержден!**\n\n"
|
||||
@@ -375,13 +395,17 @@ async def confirm_winner_callback(callback_query):
|
||||
parse_mode="Markdown"
|
||||
)
|
||||
|
||||
# Уведомляем админов
|
||||
# Уведомляем админов с nickname и клубной картой
|
||||
for admin_id in ADMIN_IDS:
|
||||
try:
|
||||
# Формируем информацию для админа
|
||||
user_info = display_name
|
||||
if owner and owner.club_card_number:
|
||||
user_info = f"{display_name} (карта: {owner.club_card_number})"
|
||||
|
||||
admin_text = (
|
||||
f"✅ **Подтверждение выигрыша**\n\n"
|
||||
f"👤 Пользователь: {callback_query.from_user.full_name} "
|
||||
f"(@{callback_query.from_user.username or 'нет username'})\n"
|
||||
f"👤 Пользователь: {user_info}\n"
|
||||
f"🎯 Розыгрыш: {lottery.title}\n"
|
||||
f"🏆 Место: {winner.place}\n"
|
||||
f"🎁 Приз: {winner.prize}\n"
|
||||
|
||||
Reference in New Issue
Block a user