From 40607aefe21425037369fdb957ada590302e5f0b Mon Sep 17 00:00:00 2001 From: MoonTestUse1 Date: Thu, 26 Dec 2024 04:08:18 +0600 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=BE=D0=B2=20=D0=B2=20?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BE=D0=B22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/bot/bot.py | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/backend/app/bot/bot.py b/backend/app/bot/bot.py index f02d548..5fb38f6 100644 --- a/backend/app/bot/bot.py +++ b/backend/app/bot/bot.py @@ -12,3 +12,58 @@ async def start_bot(): await dp.start_polling(bot, skip_updates=True) finally: await bot.session.close() + +from aiogram import Bot, Dispatcher, types +from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton +from sqlalchemy.orm import Session +from ..database import get_db +from .. import models + +# Создаем обработчик нажатия кнопки +@dp.callback_query_handler(lambda c: c.data.startswith('status_')) +async def process_status_button(callback_query: types.CallbackQuery): + try: + # Получаем ID заявки и новый статус из callback_data + _, request_id, new_status = callback_query.data.split('_') + request_id = int(request_id) + + # Получаем сессию базы данных + db = next(get_db()) + + # Обновляем статус в базе данных + request = db.query(models.Request).filter(models.Request.id == request_id).first() + if request: + request.status = new_status + db.commit() + + # Обновляем сообщение в боте + await callback_query.message.edit_text( + f"Заявка №{request_id}\nСтатус: {new_status}", + reply_markup=get_updated_keyboard(request_id, new_status) + ) + + # Отправляем уведомление о успешном обновлении + await callback_query.answer("Статус успешно обновлен!") + else: + await callback_query.answer("Заявка не найдена!", show_alert=True) + + except Exception as e: + print(f"Error in process_status_button: {e}") + await callback_query.answer("Произошла ошибка при обновлении статуса", show_alert=True) + +def get_updated_keyboard(request_id: int, current_status: str) -> InlineKeyboardMarkup: + keyboard = InlineKeyboardMarkup() + + if current_status != "in_progress": + keyboard.add(InlineKeyboardButton( + "В работе", + callback_data=f"status_{request_id}_in_progress" + )) + + if current_status != "completed": + keyboard.add(InlineKeyboardButton( + "Завершено", + callback_data=f"status_{request_id}_completed" + )) + + return keyboard \ No newline at end of file