1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

Починка статусов в ботов5

This commit is contained in:
MoonTestUse1
2024-12-26 04:23:18 +06:00
parent a44297f90a
commit 3a8d996975
6 changed files with 112 additions and 40 deletions

View File

@@ -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']

View 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

View File

@@ -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("Бот для обработки заявок запущен!")