fix(chat history): фикс

This commit is contained in:
zavolo
2026-05-11 00:26:31 +03:00
parent 9b60b15538
commit 31844c7fa2

View File

@@ -20,6 +20,7 @@ class HistoryProcessors(BaseProcessor):
backward = payload.get("backward", 0) backward = payload.get("backward", 0)
from_time = payload.get("from", 0) from_time = payload.get("from", 0)
getMessages = payload.get("getMessages", True) getMessages = payload.get("getMessages", True)
getChat = payload.get("getChat", False)
messages = [] messages = []
backward_count = 0 backward_count = 0
forward_count = 0 forward_count = 0
@@ -79,19 +80,21 @@ class HistoryProcessors(BaseProcessor):
messages.sort(key=lambda x: x["time"]) messages.sort(key=lambda x: x["time"])
# Формируем ответ. # Формируем ответ.
# Парсер a23 в MAX-клиенте ждёт ВСЕГДА все 5 полей (messages, # Реальный парсер ответа CHAT_HISTORY в MAX 26.15.x — это az2.j(),
# forward, backward, pos, total). Если каких-то нет — клиент # который ждёт всего 3 поля:
# бросает соединение и история не отображается. # chat — qs2-объект чата (опционально, если getChat=False)
# ВАЖНО: forward/backward здесь = СКОЛЬКО СООБЩЕНИЙ ВЕРНУЛИ # messages — массив сообщений (jr4.a → u6h.Q для каждого)
# (а не "сколько ещё осталось"). Если 0 — клиент игнорирует # messageIds — Set<Long> списка id сообщений в этом ответе
# массив messages и считает что "ничего нет". # Поля forward/backward/pos/total — это парсер a23 для CHAT_MEDIA,
# к chat_history они не имеют отношения.
payload = { payload = {
"messages": messages, "messages": messages,
"forward": forward_count, # сколько вернули вперёд "messageIds": [m["id"] for m in messages],
"backward": backward_count, # сколько вернули назад
"pos": 0, # позиция курсора (offset)
"total": len(messages), # всего в этой пачке
} }
# chat-объект включается только если клиент просил его (getChat=True).
# Структура qs2 огромная (десятки полей), поэтому пока пустой dict.
if getChat:
payload["chat"] = {}
# Собираем пакет # Собираем пакет
packet = self.proto.pack_packet( packet = self.proto.pack_packet(