from aiogram import Router, F from aiogram.filters import Command from aiogram.types import ( Message, CallbackQuery ) from aiogram.fsm.context import FSMContext from config import ADMIN_IDS from database import ( get_tickets, get_ticket, close_ticket ) from states import AdminState router = Router() @router.message(Command("tickets")) async def tickets(message: Message): if message.from_user.id not in ADMIN_IDS: return tickets = await get_tickets() if not tickets: await message.answer( "📭 Новых обращений нет." ) return text = "📩 Обращения:\n\n" for ticket in tickets: text += ( f"🆔 #{ticket[0]}\n" f"👤 Пользователь: {ticket[1]}\n" f"📝 Сообщение:\n" f"{ticket[2]}\n" f"📌 Статус: {ticket[3]}\n" "━━━━━━━━━━━━━━\n" ) await message.answer(text) @router.callback_query( F.data.startswith("reply_ticket:") ) async def reply_ticket( callback: CallbackQuery, state: FSMContext ): ticket_id = int( callback.data.split(":")[1] ) await state.update_data( ticket_id=ticket_id ) await state.set_state( AdminState.waiting_reply ) await callback.message.answer( "💬 Напишите ответ пользователю:" ) await callback.answer() @router.message(AdminState.waiting_reply) async def send_admin_reply( message: Message, state: FSMContext, bot ): data = await state.get_data() ticket_id = data.get( "ticket_id" ) if not ticket_id: await message.answer( "❌ Тикет не найден." ) await state.clear() return ticket = await get_ticket( ticket_id ) if not ticket: await message.answer( "❌ Обращение не найдено." ) await state.clear() return user_id = ticket[1] try: await bot.send_message( user_id, ( "📩 Ответ поддержки\n\n" f"{message.text}" ) ) await message.answer( "✅ Ответ отправлен пользователю." ) except Exception as e: await message.answer( f"❌ Не удалось отправить сообщение:\n{e}" ) await state.clear() @router.callback_query( F.data.startswith("close_ticket:") ) async def close_ticket_handler( callback: CallbackQuery ): ticket_id = int( callback.data.split(":")[1] ) await close_ticket( ticket_id ) await callback.message.edit_text( callback.message.html_text + "\n\n✅ Тикет закрыт" ) await callback.answer( "Тикет закрыт" )