fix: исправлен порядок обработчиков callback'ов
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
- Перемещён handle_edit_field ПЕРЕД redirect_to_edit_lottery - Более специфичный паттерн admin_edit_field_ теперь проверяется первым - Удалён дубликат обработчика handle_edit_field - Исправлен ValueError: invalid literal for int() with base 10
This commit is contained in:
@@ -1810,6 +1810,47 @@ async def start_edit_lottery(callback: CallbackQuery, state: FSMContext):
|
||||
await callback.message.edit_text(text, reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons))
|
||||
|
||||
|
||||
@admin_router.callback_query(F.data.startswith("admin_edit_field_"))
|
||||
async def handle_edit_field(callback: CallbackQuery, state: FSMContext):
|
||||
"""Обработка выбора поля для редактирования"""
|
||||
if not is_admin(callback.from_user.id):
|
||||
await callback.answer("❌ Недостаточно прав", show_alert=True)
|
||||
return
|
||||
|
||||
# Парсим callback_data: admin_edit_field_{lottery_id}_{field_name}
|
||||
parts = callback.data.split("_")
|
||||
if len(parts) < 5:
|
||||
await callback.answer("❌ Неверный формат данных", show_alert=True)
|
||||
return
|
||||
|
||||
lottery_id = int(parts[3]) # admin_edit_field_{lottery_id}_...
|
||||
field_name = "_".join(parts[4:]) # Всё после lottery_id это имя поля
|
||||
|
||||
await state.update_data(edit_lottery_id=lottery_id, edit_field=field_name)
|
||||
|
||||
# Определяем, что редактируем
|
||||
if field_name == "title":
|
||||
text = "📝 Введите новое название розыгрыша:"
|
||||
await state.set_state(AdminStates.lottery_title)
|
||||
elif field_name == "description":
|
||||
text = "📄 Введите новое описание розыгрыша:"
|
||||
await state.set_state(AdminStates.lottery_description)
|
||||
elif field_name == "prizes":
|
||||
text = "🎁 Введите новый список призов (каждый приз с новой строки):"
|
||||
await state.set_state(AdminStates.lottery_prizes)
|
||||
else:
|
||||
await callback.answer("❌ Неизвестное поле", show_alert=True)
|
||||
return
|
||||
|
||||
await callback.message.edit_text(
|
||||
text,
|
||||
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
|
||||
[InlineKeyboardButton(text="❌ Отмена", callback_data="admin_lotteries")]
|
||||
])
|
||||
)
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@admin_router.callback_query(F.data.startswith("admin_edit_"))
|
||||
async def redirect_to_edit_lottery(callback: CallbackQuery, state: FSMContext):
|
||||
"""Редирект на редактирование розыгрыша из детального просмотра"""
|
||||
@@ -1867,47 +1908,6 @@ async def choose_edit_field(callback: CallbackQuery, state: FSMContext):
|
||||
await callback.message.edit_text(text, reply_markup=InlineKeyboardMarkup(inline_keyboard=buttons))
|
||||
|
||||
|
||||
@admin_router.callback_query(F.data.startswith("admin_edit_field_"))
|
||||
async def handle_edit_field(callback: CallbackQuery, state: FSMContext):
|
||||
"""Обработка выбора поля для редактирования"""
|
||||
if not is_admin(callback.from_user.id):
|
||||
await callback.answer("❌ Недостаточно прав", show_alert=True)
|
||||
return
|
||||
|
||||
# Парсим callback_data: admin_edit_field_{lottery_id}_{field_name}
|
||||
parts = callback.data.split("_")
|
||||
if len(parts) < 5:
|
||||
await callback.answer("❌ Неверный формат данных", show_alert=True)
|
||||
return
|
||||
|
||||
lottery_id = int(parts[3]) # admin_edit_field_{lottery_id}_...
|
||||
field_name = "_".join(parts[4:]) # Всё после lottery_id это имя поля
|
||||
|
||||
await state.update_data(edit_lottery_id=lottery_id, edit_field=field_name)
|
||||
|
||||
# Определяем, что редактируем
|
||||
if field_name == "title":
|
||||
text = "📝 Введите новое название розыгрыша:"
|
||||
await state.set_state(AdminStates.lottery_title)
|
||||
elif field_name == "description":
|
||||
text = "📄 Введите новое описание розыгрыша:"
|
||||
await state.set_state(AdminStates.lottery_description)
|
||||
elif field_name == "prizes":
|
||||
text = "🎁 Введите новый список призов (каждый приз с новой строки):"
|
||||
await state.set_state(AdminStates.lottery_prizes)
|
||||
else:
|
||||
await callback.answer("❌ Неизвестное поле", show_alert=True)
|
||||
return
|
||||
|
||||
await callback.message.edit_text(
|
||||
text,
|
||||
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
|
||||
[InlineKeyboardButton(text="❌ Отмена", callback_data="admin_lotteries")]
|
||||
])
|
||||
)
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@admin_router.callback_query(F.data.startswith("admin_toggle_active_"))
|
||||
async def toggle_lottery_active(callback: CallbackQuery, state: FSMContext):
|
||||
"""Переключить активность розыгрыша"""
|
||||
|
||||
Reference in New Issue
Block a user