diff --git a/src/adapters/jabber/connection.py b/src/adapters/jabber/connection.py index 19cc5bd..3c6194a 100644 --- a/src/adapters/jabber/connection.py +++ b/src/adapters/jabber/connection.py @@ -28,7 +28,8 @@ class JabberConnection(ClientXMPP, JabberRoomJoiner, JabberRoomLeaver, MucJidRes self.register_plugin("xep_0199") # XMPP Ping self.add_event_handler("session_start", self._on_session_start) - self.add_event_handler("message", self._on_message) + self.add_event_handler("message", self._on_chat_message) + self.add_event_handler("groupchat_message", self._on_groupchat_message) self.add_event_handler("failed_auth", self._on_failed_auth) def set_message_callback(self, callback: MessageCallback) -> None: @@ -51,18 +52,28 @@ class JabberConnection(ClientXMPP, JabberRoomJoiner, JabberRoomLeaver, MucJidRes except Exception: logger.exception("Не удалось зайти в комнату %s при старте", room_jid) - async def _on_message(self, msg) -> None: - # Игнорируем собственные сообщения (1:1 чат) - if msg["from"].bare == self.boundjid.bare: + async def _on_chat_message(self, msg) -> None: + """Обрабатывает только личные сообщения (type=chat).""" + if msg["type"] != "chat": return - # Игнорируем собственные сообщения в MUC (отражённые сервером) - if msg["type"] == "groupchat" and msg["from"].resource == self._nick: + if msg["from"].bare == self.boundjid.bare: return if self._message_callback is not None: try: await self._message_callback(msg) except Exception: - logger.exception("Ошибка в обработчике сообщений") + logger.exception("Ошибка в обработчике личных сообщений") + + async def _on_groupchat_message(self, msg) -> None: + """Обрабатывает сообщения в конференции (type=groupchat).""" + # Игнорируем собственные сообщения, отражённые сервером + if msg["from"].resource == self._nick: + return + if self._message_callback is not None: + try: + await self._message_callback(msg) + except Exception: + logger.exception("Ошибка в обработчике сообщений конференции") async def _on_failed_auth(self, event) -> None: logger.error("Ошибка аутентификации XMPP")