intra_max_chatbot/admin/routes/chat_log.py
2026-03-26 00:54:10 +03:00

52 lines
1.8 KiB
Python

from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from admin.auth import require_admin
from admin.templates_env import templates
from bot.bot_instance import get_bot
from database.queries.bot_users import get_bot_user_by_max_id
from database.queries.message_log import get_chat_list, get_message_log, log_message
router = APIRouter(prefix="/chat-log", dependencies=[Depends(require_admin)])
@router.get("", response_class=HTMLResponse)
async def chat_list(request: Request):
chats = await get_chat_list()
return templates.TemplateResponse(
request=request, name="chat_log/list.html", context={"chats": chats}
)
@router.get("/{max_user_id}", response_class=HTMLResponse)
async def chat_history(request: Request, max_user_id: int):
messages = await get_message_log(max_user_id=max_user_id, limit=200)
bot_user = await get_bot_user_by_max_id(max_user_id)
return templates.TemplateResponse(
request=request,
name="chat_log/history.html",
context={
"messages": messages,
"max_user_id": max_user_id,
"bot_user": bot_user,
},
)
@router.post("/{max_user_id}/send")
async def send_message_to_user(max_user_id: int, text: str = Form(...)):
bot_user = await get_bot_user_by_max_id(max_user_id)
if bot_user is None or not bot_user.get("max_chat_id"):
return RedirectResponse(f"/admin/chat-log/{max_user_id}", status_code=303)
chat_id = bot_user["max_chat_id"]
bot = get_bot()
await bot.send_message(chat_id=chat_id, text=text)
await log_message(
direction="out",
max_user_id=max_user_id,
max_chat_id=chat_id,
message_id=None,
text=text,
)
return RedirectResponse(f"/admin/chat-log/{max_user_id}", status_code=303)