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(
"Тикет закрыт"
)