diff options
author | mathieui <mathieui@mathieui.net> | 2015-04-13 15:08:04 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2015-04-13 15:08:04 +0200 |
commit | bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9 (patch) | |
tree | 7b52ff21617caf3d7b1ef987b5853df058aec104 | |
parent | d5b1904ebb816560a7a0cecf51ac74c6fe9dd6b6 (diff) | |
download | slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.tar.gz slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.tar.bz2 slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.tar.xz slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.zip |
basexmpp: Add a message_error event
The "message" event only receives messages with a body, and error
messages don’t necessarily have it. Removing the body requirement from
the "message" event could lean to unhandled conditions in existing code.
-rw-r--r-- | docs/event_index.rst | 7 | ||||
-rw-r--r-- | slixmpp/basexmpp.py | 13 |
2 files changed, 20 insertions, 0 deletions
diff --git a/docs/event_index.rst b/docs/event_index.rst index 3dd45ce8..07a4fbd0 100644 --- a/docs/event_index.rst +++ b/docs/event_index.rst @@ -152,6 +152,13 @@ Event Index Makes the contents of message stanzas available whenever one is received. Be sure to check the message type in order to handle error messages. + message_error + - **Data:** :py:class:`~slixmpp.Message` + - **Source:** :py:class:`BaseXMPP <slixmpp.BaseXMPP>` + + Makes the contents of message stanzas available whenever one is received. + Only handler messages with an ``error`` type. + message_form - **Data:** :py:class:`~slixmpp.plugins.xep_0004.Form` - **Source:** :py:class:`~slixmpp.plugins.xep_0004.xep_0004` diff --git a/slixmpp/basexmpp.py b/slixmpp/basexmpp.py index 8419a676..f60ba560 100644 --- a/slixmpp/basexmpp.py +++ b/slixmpp/basexmpp.py @@ -143,6 +143,13 @@ class BaseXMPP(XMLStream): MatchXPath('{%s}message/{%s}body' % (self.default_ns, self.default_ns)), self._handle_message)) + + self.register_handler( + Callback('IMError', + MatchXPath('{%s}message/{%s}error' % (self.default_ns, + self.default_ns)), + self._handle_message_error)) + self.register_handler( Callback('Presence', MatchXPath("{%s}presence" % self.default_ns), @@ -690,6 +697,12 @@ class BaseXMPP(XMLStream): msg['to'] = self.boundjid self.event('message', msg) + def _handle_message_error(self, msg): + """Process incoming message error stanzas.""" + if not self.is_component and not msg['to'].bare: + msg['to'] = self.boundjid + self.event('message_error', msg) + def _handle_available(self, pres): self.roster[pres['to']][pres['from']].handle_available(pres) |