mirror of
https://github.com/openmax-server/server.git
synced 2026-06-13 14:21:41 +03:00
MAX: история таки заработала — cid/link/reactionInfo обязательны в схеме
Десктопный MAX подключается через TCP (mobile-протокол) и парсит
msgpack по фиксированной схеме. Если в сообщении выпадает любое из
полей — клиент молча обрывает соединение. После 87cfc19 как раз
такие условные `if elements: ...` / `if link: ...` (а link и
reaction_info там всегда были `{}`, то есть falsy) вырезали поля
из ответа CHAT_HISTORY и MSG_SEND, чем и сломали историю.
- src/common/tools.py: новый build_message_dict() — единая сборка
тела сообщения, где все поля (id, cid, time, type, sender, text,
attaches, elements, reactionInfo, link) присутствуют ВСЕГДА.
get_last_message переписан через него.
- src/oneme/processors/history.py: chat_history использует
build_message_dict вместо ручной логики с условными if-ками.
- src/oneme/processors/messages.py: msg_send.bodyMessage теперь
отдает cid / reactionInfo / link даже пустыми и приводит id
к int для mobile, str для web.
Цепная польза: auth.py LOGIN bootstrap (через generate_chats →
get_last_message) и search.py тоже теперь шлют корректную схему.
This commit is contained in:
@@ -125,16 +125,21 @@ class MessagesProcessors(BaseProcessor):
|
||||
db_pool=self.db_pool
|
||||
)
|
||||
|
||||
# Готовое тело сообщения
|
||||
# Готовое тело сообщения. Поля cid / elements / reactionInfo / link
|
||||
# должны присутствовать ВСЕГДА (даже пустые) — десктопный MAX
|
||||
# ожидает фиксированную msgpack-схему и обрывает соединение
|
||||
# при отсутствии любого из них (см. регрессию из 87cfc19).
|
||||
bodyMessage = {
|
||||
"id": messageId,
|
||||
"id": messageId if self.type == "mobile" else str(messageId),
|
||||
"cid": int(cid or 0),
|
||||
"time": messageTime,
|
||||
"type": "USER",
|
||||
"sender": senderId,
|
||||
"cid": cid,
|
||||
"text": text,
|
||||
"attaches": attaches,
|
||||
"elements": elements
|
||||
"attaches": attaches if isinstance(attaches, list) else [],
|
||||
"elements": elements if isinstance(elements, list) else [],
|
||||
"reactionInfo": {},
|
||||
"link": {},
|
||||
}
|
||||
|
||||
# Отправляем событие всем участникам чата
|
||||
|
||||
Reference in New Issue
Block a user