From 24b0123185bdff307da1bdc9d8ab35da4e6b67e7 Mon Sep 17 00:00:00 2001 From: zavolo Date: Mon, 11 May 2026 00:38:04 +0300 Subject: [PATCH] =?UTF-8?q?fix(chat=20history):=20=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/oneme/processors/history.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/oneme/processors/history.py b/src/oneme/processors/history.py index aa94727..1038c67 100644 --- a/src/oneme/processors/history.py +++ b/src/oneme/processors/history.py @@ -1,5 +1,6 @@ import pydantic import json +import time from classes.baseprocessor import BaseProcessor from oneme.models import ChatHistoryPayloadModel @@ -79,6 +80,18 @@ class HistoryProcessors(BaseProcessor): # Сортируем сообщения по времени messages.sort(key=lambda x: x["time"]) + # КОСТЫЛЬ: клиент MAX в fz2.b() фильтрует сообщения по условию + # `message.time >= chat.createTime`. Если у пользователя чат был + # создан недавно, а наши сообщения в БД старые — все они отбрасываются + # (см. реверс defpackage.fz2.java:89). Сдвигаем time всех сообщений + # на «сейчас минус 1 секунда * (N-i)», чтобы все были после createTime. + if messages: + now_ms = int(time.time() * 1000) + n = len(messages) + for i, m in enumerate(messages): + m["time"] = now_ms - (n - 1 - i) * 1000 # самое новое = сейчас + m["updateTime"] = m["time"] + # Формируем ответ. # Реальный парсер ответа CHAT_HISTORY в MAX 26.15.x — это az2.j(), # который ждёт всего 3 поля: @@ -88,13 +101,10 @@ class HistoryProcessors(BaseProcessor): # Поля forward/backward/pos/total — это парсер a23 для CHAT_MEDIA, # к chat_history они не имеют отношения. payload = { + "chat": {}, # qs2-объект чата (пустой) "messages": messages, "messageIds": [m["id"] for m in messages], } - # chat-объект включается только если клиент просил его (getChat=True). - # Структура qs2 огромная (десятки полей), поэтому пока пустой dict. - if getChat: - payload["chat"] = {} # Собираем пакет packet = self.proto.pack_packet(