main functions fix

This commit is contained in:
2025-11-15 20:03:49 +09:00
parent e0075d91b6
commit 3a25e6a4cb
18 changed files with 1779 additions and 75 deletions

View File

@@ -1184,11 +1184,11 @@ async def choose_accounts_bulk_add(callback: CallbackQuery, state: FSMContext):
text = f"🏦 Массовое добавление в: {lottery.title}\n\n"
text += "Введите список номеров счетов через запятую или новую строку:\n\n"
text += "Примеры:\n"
text += "• 12-34-56-78-90-12-34-56\n"
text += "• 98-76-54-32-10-98-76-54, 11-22-33-44-55-66-77-88\n"
text += "• 12345678901234567890 (будет отформатирован)\n\n"
text += "Формат: XX-XX-XX-XX-XX-XX-XX-XX\n"
text += "Всего 8 пар цифр разделенных дефисами"
text += "• 12-34-56-78-90-12-34\n"
text += "• 98-76-54-32-10-98-76, 11-22-33-44-55-66-77\n"
text += "• 12345678901234 (будет отформатирован)\n\n"
text += "Формат: XX-XX-XX-XX-XX-XX-XX\n"
text += "Всего 7 пар цифр разделенных дефисами"
await callback.message.edit_text(
text,
@@ -1314,10 +1314,10 @@ async def choose_accounts_bulk_remove(callback: CallbackQuery, state: FSMContext
text = f"🏦 Массовое удаление из: {lottery.title}\n\n"
text += "Введите список номеров счетов через запятую или новую строку:\n\n"
text += "Примеры:\n"
text += "• 12-34-56-78-90-12-34-56\n"
text += "• 98-76-54-32-10-98-76-54, 11-22-33-44-55-66-77-88\n"
text += "• 12345678901234567890 (будет отформатирован)\n\n"
text += "Формат: XX-XX-XX-XX-XX-XX-XX-XX"
text += "• 12-34-56-78-90-12-34\n"
text += "• 98-76-54-32-10-98-76, 11-22-33-44-55-66-77\n"
text += "• 12345678901234 (будет отформатирован)\n\n"
text += "Формат: XX-XX-XX-XX-XX-XX-XX"
await callback.message.edit_text(
text,
@@ -1868,6 +1868,20 @@ async def start_set_manual_winner(callback: CallbackQuery, state: FSMContext):
await callback.message.edit_text(text, reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons))
@admin_router.callback_query(F.data.startswith("admin_set_winner_"))
async def handle_set_winner_from_lottery(callback: CallbackQuery, state: FSMContext):
"""Обработчик для кнопки 'Установить победителя' из карточки розыгрыша"""
if not is_admin(callback.from_user.id):
await callback.answer("❌ Недостаточно прав", show_alert=True)
return
lottery_id = int(callback.data.split("_")[-1])
# Перенаправляем на стандартный обработчик
callback.data = f"admin_choose_winner_lottery_{lottery_id}"
await choose_winner_place(callback, state)
@admin_router.callback_query(F.data.startswith("admin_choose_winner_lottery_"))
async def choose_winner_place(callback: CallbackQuery, state: FSMContext):
"""Выбор места для победителя"""
@@ -2023,6 +2037,101 @@ async def process_winner_user(message: Message, state: FSMContext):
)
# ======================
# ПРОВЕДЕНИЕ РОЗЫГРЫША
# ======================
@admin_router.callback_query(F.data == "admin_conduct_draw")
async def choose_lottery_for_draw(callback: CallbackQuery):
"""Выбор розыгрыша для проведения"""
if not is_admin(callback.from_user.id):
await callback.answer("❌ Недостаточно прав", show_alert=True)
return
async with async_session_maker() as session:
lotteries = await LotteryService.get_active_lotteries(session, limit=100)
if not lotteries:
await callback.answer("Нет активных розыгрышей", show_alert=True)
return
text = "🎲 Выберите розыгрыш для проведения:\n\n"
buttons = []
for lottery in lotteries:
async with async_session_maker() as session:
participants_count = await ParticipationService.get_participants_count(session, lottery.id)
text += f"🎯 {lottery.title}\n"
text += f" 👥 Участников: {participants_count}\n"
if lottery.is_completed:
text += f" ✅ Завершён\n"
text += "\n"
buttons.append([
InlineKeyboardButton(
text=f"🎲 {lottery.title[:30]}...",
callback_data=f"admin_conduct_{lottery.id}"
)
])
buttons.append([InlineKeyboardButton(text="🔙 Назад", callback_data="admin_draws")])
await callback.message.edit_text(text, reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons))
@admin_router.callback_query(F.data.startswith("admin_conduct_"))
async def conduct_lottery_draw(callback: CallbackQuery):
"""Проведение розыгрыша"""
if not is_admin(callback.from_user.id):
await callback.answer("❌ Недостаточно прав", show_alert=True)
return
lottery_id = int(callback.data.split("_")[-1])
async with async_session_maker() as session:
lottery = await LotteryService.get_lottery(session, lottery_id)
if not lottery:
await callback.answer("Розыгрыш не найден", show_alert=True)
return
if lottery.is_completed:
await callback.answer("Розыгрыш уже завершён", show_alert=True)
return
participants_count = await ParticipationService.get_participants_count(session, lottery_id)
if participants_count == 0:
await callback.answer("Нет участников для розыгрыша", show_alert=True)
return
# Проводим розыгрыш
from conduct_draw import conduct_draw
winners = await conduct_draw(lottery_id)
if winners:
text = f"🎉 Розыгрыш '{lottery.title}' завершён!\n\n"
text += "🏆 Победители:\n"
for winner in winners:
if winner.account_number:
text += f"{winner.place} место: {winner.account_number}\n"
elif winner.user:
username = f"@{winner.user.username}" if winner.user.username else winner.user.first_name
text += f"{winner.place} место: {username}\n"
else:
text += f"{winner.place} место: ID {winner.user_id}\n"
await callback.message.edit_text(
text,
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="🔙 К розыгрышам", callback_data="admin_draws")]
])
)
else:
await callback.answer("Ошибка при проведении розыгрыша", show_alert=True)
# ======================
# СТАТИСТИКА
# ======================