From 2bf6bf84f3c3852821499d01c85dbead2816abb9 Mon Sep 17 00:00:00 2001 From: sau Date: Sat, 20 Jun 2026 14:02:52 +0300 Subject: [PATCH] fix(events): make ReactionUpdateEvent counters/total_count optional On reaction removal the server sends NOTIF_MSG_REACTIONS_CHANGED (OP155) without `counters` (and total_count 0). The model marked both as required, so removal frames raised a ValidationError and failed to dispatch. Default counters to an empty list and total_count to 0 so removal events validate. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/pymax/types/events/reaction.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/pymax/types/events/reaction.py b/src/pymax/types/events/reaction.py index 964729a..c5dda23 100644 --- a/src/pymax/types/events/reaction.py +++ b/src/pymax/types/events/reaction.py @@ -1,3 +1,5 @@ +from pydantic import Field + from pymax.types.domain.base import CamelModel from pymax.types.domain.message import ReactionCounter @@ -9,13 +11,14 @@ class ReactionUpdateEvent(CamelModel): :vartype message_id: str :ivar chat_id: ID чата. :vartype chat_id: int - :ivar counters: Счетчики реакций по типам. + :ivar counters: Счетчики реакций по типам. Пусто, когда реакцию сняли — + сервер шлёт ``NOTIF_MSG_REACTIONS_CHANGED`` (OP155) без ``counters``. :vartype counters: list[ReactionCounter] - :ivar total_count: Общее количество реакций. + :ivar total_count: Общее количество реакций (0 при снятии последней). :vartype total_count: int """ message_id: str chat_id: int - counters: list[ReactionCounter] - total_count: int + counters: list[ReactionCounter] = Field(default_factory=list) + total_count: int = 0