70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
import json
|
|
from database.connection import get_db
|
|
|
|
|
|
async def log_message(
|
|
direction: str,
|
|
max_user_id: int | None,
|
|
max_chat_id: int | None,
|
|
message_id: str | None,
|
|
text: str | None,
|
|
attachments: list | None = None,
|
|
) -> None:
|
|
db = get_db()
|
|
att_json = json.dumps(attachments, ensure_ascii=False) if attachments else None
|
|
await db.execute(
|
|
"""
|
|
INSERT INTO message_log
|
|
(direction, max_user_id, max_chat_id, message_id, text, attachment_json)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
""",
|
|
(direction, max_user_id, max_chat_id, message_id, text, att_json),
|
|
)
|
|
await db.commit()
|
|
|
|
|
|
async def get_message_log(
|
|
max_user_id: int | None = None,
|
|
max_chat_id: int | None = None,
|
|
limit: int = 100,
|
|
offset: int = 0,
|
|
) -> list[dict]:
|
|
db = get_db()
|
|
conditions = []
|
|
params: list = []
|
|
if max_user_id is not None:
|
|
conditions.append("max_user_id = ?")
|
|
params.append(max_user_id)
|
|
if max_chat_id is not None:
|
|
conditions.append("max_chat_id = ?")
|
|
params.append(max_chat_id)
|
|
where = ("WHERE " + " AND ".join(conditions)) if conditions else ""
|
|
params += [limit, offset]
|
|
query = f"""
|
|
SELECT * FROM message_log
|
|
{where}
|
|
ORDER BY created_at DESC
|
|
LIMIT ? OFFSET ?
|
|
"""
|
|
async with db.execute(query, params) as cur:
|
|
rows = await cur.fetchall()
|
|
return [dict(r) for r in rows]
|
|
|
|
|
|
async def get_chat_list() -> list[dict]:
|
|
"""Последнее сообщение на каждый чат для списка чатов в панели."""
|
|
db = get_db()
|
|
async with db.execute(
|
|
"""
|
|
SELECT ml.max_chat_id, ml.max_user_id, ml.text, ml.created_at,
|
|
bu.first_name, bu.username
|
|
FROM message_log ml
|
|
LEFT JOIN bot_users bu ON bu.max_user_id = ml.max_user_id
|
|
WHERE ml.max_chat_id IS NOT NULL
|
|
GROUP BY ml.max_chat_id
|
|
HAVING ml.id = MAX(ml.id)
|
|
ORDER BY ml.created_at DESC
|
|
"""
|
|
) as cur:
|
|
rows = await cur.fetchall()
|
|
return [dict(r) for r in rows]
|