fix(chat history): фикс

This commit is contained in:
zavolo
2026-05-10 23:27:13 +03:00
parent 3bf8bc5770
commit 77d6ca8cc0

View File

@@ -21,6 +21,8 @@ class HistoryProcessors(BaseProcessor):
from_time = payload.get("from", 0) from_time = payload.get("from", 0)
getMessages = payload.get("getMessages", True) getMessages = payload.get("getMessages", True)
messages = [] messages = []
backward_count = 0
forward_count = 0
# Если пользователь хочет получить историю из избранного, # Если пользователь хочет получить историю из избранного,
# то выставляем в качестве ID чата отрицательный ID отправителя # то выставляем в качестве ID чата отрицательный ID отправителя
@@ -60,6 +62,7 @@ class HistoryProcessors(BaseProcessor):
for row in result: for row in result:
messages.append(self.tools.build_message_dict(row, self.type)) messages.append(self.tools.build_message_dict(row, self.type))
backward_count = len(result)
if forward > 0: if forward > 0:
await cursor.execute( await cursor.execute(
"SELECT * FROM messages WHERE chat_id = %s AND time > %s ORDER BY time ASC LIMIT %s", "SELECT * FROM messages WHERE chat_id = %s AND time > %s ORDER BY time ASC LIMIT %s",
@@ -70,6 +73,7 @@ class HistoryProcessors(BaseProcessor):
for row in result: for row in result:
messages.append(self.tools.build_message_dict(row, self.type)) messages.append(self.tools.build_message_dict(row, self.type))
forward_count = len(result)
# Сортируем сообщения по времени # Сортируем сообщения по времени
messages.sort(key=lambda x: x["time"]) messages.sort(key=lambda x: x["time"])
@@ -78,12 +82,15 @@ class HistoryProcessors(BaseProcessor):
# Парсер a23 в MAX-клиенте ждёт ВСЕГДА все 5 полей (messages, # Парсер a23 в MAX-клиенте ждёт ВСЕГДА все 5 полей (messages,
# forward, backward, pos, total). Если каких-то нет — клиент # forward, backward, pos, total). Если каких-то нет — клиент
# бросает соединение и история не отображается. # бросает соединение и история не отображается.
# ВАЖНО: forward/backward здесь = СКОЛЬКО СООБЩЕНИЙ ВЕРНУЛИ
# (а не "сколько ещё осталось"). Если 0 — клиент игнорирует
# массив messages и считает что "ничего нет".
payload = { payload = {
"messages": messages, "messages": messages,
"forward": 0, # сколько ещё доступно вперёд "forward": forward_count, # сколько вернули вперёд
"backward": 0, # сколько ещё доступно назад "backward": backward_count, # сколько вернули назад
"pos": 0, # позиция курсора "pos": 0, # позиция курсора (offset)
"total": len(messages), # всего в чате (примерно) "total": len(messages), # всего в этой пачке
} }
# Собираем пакет # Собираем пакет