mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
Починка статусов в ботов5
This commit is contained in:
@@ -1,2 +1,6 @@
|
||||
from .start import dp
|
||||
from .status import dp
|
||||
"""Handlers initialization"""
|
||||
from .callbacks import router as callbacks_router
|
||||
from .start import router as start_router
|
||||
from .callbacks import get_updated_keyboard
|
||||
|
||||
__all__ = ['callbacks_router', 'start_router', 'get_updated_keyboard']
|
70
backend/app/bot/handlers/callbacks.py
Normal file
70
backend/app/bot/handlers/callbacks.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Handlers for callback queries"""
|
||||
from aiogram import Router, types
|
||||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from sqlalchemy.orm import Session
|
||||
from ...database import get_db
|
||||
from ... import models
|
||||
from ..config import RequestStatus
|
||||
|
||||
router = Router()
|
||||
|
||||
@router.callback_query(lambda c: c.data and c.data.startswith('status_'))
|
||||
async def process_status_button(callback_query: types.CallbackQuery):
|
||||
"""
|
||||
Handle status update button clicks.
|
||||
Updates request status in database and updates message in Telegram.
|
||||
"""
|
||||
try:
|
||||
# Parse callback data
|
||||
_, request_id, new_status = callback_query.data.split('_')
|
||||
request_id = int(request_id)
|
||||
|
||||
# Get database session
|
||||
db = next(get_db())
|
||||
|
||||
# Update request status
|
||||
request = db.query(models.Request).filter(models.Request.id == request_id).first()
|
||||
if request:
|
||||
request.status = new_status
|
||||
db.commit()
|
||||
|
||||
# Update message in Telegram
|
||||
await callback_query.message.edit_text(
|
||||
f"Заявка №{request_id}\n"
|
||||
f"Статус: {new_status}\n"
|
||||
f"Описание: {request.description}",
|
||||
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:
|
||||
"""Create keyboard with status update buttons"""
|
||||
keyboard = InlineKeyboardMarkup(inline_keyboard=[])
|
||||
|
||||
if current_status != RequestStatus.IN_PROGRESS:
|
||||
keyboard.inline_keyboard.append([
|
||||
InlineKeyboardButton(
|
||||
text="В работе",
|
||||
callback_data=f"status_{request_id}_{RequestStatus.IN_PROGRESS}"
|
||||
)
|
||||
])
|
||||
|
||||
if current_status != RequestStatus.COMPLETED:
|
||||
keyboard.inline_keyboard.append([
|
||||
InlineKeyboardButton(
|
||||
text="Завершено",
|
||||
callback_data=f"status_{request_id}_{RequestStatus.COMPLETED}"
|
||||
)
|
||||
])
|
||||
|
||||
return keyboard
|
@@ -1,12 +1,11 @@
|
||||
from aiogram import types
|
||||
from aiogram.filters import CommandStart
|
||||
from ..bot import dp
|
||||
"""Handler for start command and other basic commands"""
|
||||
from aiogram import Router, types
|
||||
from aiogram.filters import Command
|
||||
from ..config import settings
|
||||
|
||||
router = Router()
|
||||
|
||||
@dp.message(CommandStart())
|
||||
async def start_command(message: types.Message):
|
||||
@router.message(Command("start"))
|
||||
async def cmd_start(message: types.Message):
|
||||
"""Handle /start command"""
|
||||
await message.answer(
|
||||
"👋 Привет! Я бот технической поддержки.\n"
|
||||
"Я буду отправлять уведомления о новых заявках и позволю менять их статус."
|
||||
)
|
||||
await message.answer("Бот для обработки заявок запущен!")
|
Reference in New Issue
Block a user