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))
|
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_"))
|
@admin_router.callback_query(F.data.startswith("admin_edit_"))
|
||||||
async def redirect_to_edit_lottery(callback: CallbackQuery, state: FSMContext):
|
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))
|
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_"))
|
@admin_router.callback_query(F.data.startswith("admin_toggle_active_"))
|
||||||
async def toggle_lottery_active(callback: CallbackQuery, state: FSMContext):
|
async def toggle_lottery_active(callback: CallbackQuery, state: FSMContext):
|
||||||
"""Переключить активность розыгрыша"""
|
"""Переключить активность розыгрыша"""
|
||||||
|
|||||||
Reference in New Issue
Block a user