diff options
author | Link Mauve <linkmauve@linkmauve.fr> | 2020-12-07 21:25:18 +0100 |
---|---|---|
committer | Link Mauve <linkmauve@linkmauve.fr> | 2020-12-07 21:25:18 +0100 |
commit | 8258202681b32fb7267562a9fe3a5af03eb17f50 (patch) | |
tree | 304b2440e9568cedf4a4f08a3e273fa01d37468f /slixmpp/plugins/xep_0333/markers.py | |
parent | c892fba7785df9f3e1de908c3b9cd4ea06865673 (diff) | |
parent | ef6dab81b9f1e3833b26c5d29e94bcba274798c1 (diff) | |
download | slixmpp-8258202681b32fb7267562a9fe3a5af03eb17f50.tar.gz slixmpp-8258202681b32fb7267562a9fe3a5af03eb17f50.tar.bz2 slixmpp-8258202681b32fb7267562a9fe3a5af03eb17f50.tar.xz slixmpp-8258202681b32fb7267562a9fe3a5af03eb17f50.zip |
Merge branch 'xep-0333-fixes' into 'master'
XEP-0333: Fix some issues
See merge request poezio/slixmpp!80
Diffstat (limited to 'slixmpp/plugins/xep_0333/markers.py')
-rw-r--r-- | slixmpp/plugins/xep_0333/markers.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/slixmpp/plugins/xep_0333/markers.py b/slixmpp/plugins/xep_0333/markers.py new file mode 100644 index 00000000..b8a003df --- /dev/null +++ b/slixmpp/plugins/xep_0333/markers.py @@ -0,0 +1,84 @@ +""" + slixmpp: The Slick XMPP Library + Copyright (C) 2016 Emmanuel Gil Peyrot + This file is part of slixmpp. + + See the file LICENSE for copying permission. +""" + +import logging +from typing import Optional + +from slixmpp import Message, JID +from slixmpp.plugins import BasePlugin +from slixmpp.xmlstream import register_stanza_plugin +from slixmpp.xmlstream.handler import Callback +from slixmpp.xmlstream.matcher import StanzaPath +from slixmpp.plugins.xep_0333 import stanza, Markable, Received, Displayed, Acknowledged + +log = logging.getLogger(__name__) + +class XEP_0333(BasePlugin): + + name = 'xep_0333' + description = 'XEP-0333: Chat Markers' + stanza = stanza + dependencies = {'xep_0030'} + + def plugin_init(self): + register_stanza_plugin(Message, Markable) + register_stanza_plugin(Message, Received) + register_stanza_plugin(Message, Displayed) + register_stanza_plugin(Message, Acknowledged) + + self.xmpp.register_handler( + Callback('Received Chat Marker', + StanzaPath('message/received'), + self._handle_received)) + self.xmpp.register_handler( + Callback('Displayed Chat Marker', + StanzaPath('message/displayed'), + self._handle_displayed)) + self.xmpp.register_handler( + Callback('Acknowledged Chat Marker', + StanzaPath('message/acknowledged'), + self._handle_acknowledged)) + + def session_bind(self, jid): + self.xmpp.plugin['xep_0030'].add_feature(stanza.NS) + + def plugin_end(self): + self.xmpp.plugin['xep_0030'].del_feature(feature=stanza.NS) + + def _handle_received(self, message): + self.xmpp.event('marker_received', message) + self.xmpp.event('marker', message) + + def _handle_displayed(self, message): + self.xmpp.event('marker_displayed', message) + self.xmpp.event('marker', message) + + def _handle_acknowledged(self, message): + self.xmpp.event('marker_acknowledged', message) + self.xmpp.event('marker', message) + + def send_marker(self, mto: JID, id: str, marker: str, + thread: Optional[str] = None, *, + mfrom: Optional[JID] = None): + """ + Send a chat marker. + + :param JID mto: recipient of the marker + :param str id: Identifier of the marked message + :param str marker: Marker to send (one of + displayed, retrieved, or acknowledged) + :param str thread: Message thread + :param str mfrom: Use a specific JID to send the message + """ + if marker not in ('displayed', 'retrieved', 'acknowledged'): + raise ValueError('Invalid marker: %s' % marker) + msg = self.xmpp.make_message(mto=mto, mfrom=mfrom) + if thread: + msg['thread'] = thread + msg[marker]['id'] = id + msg.send() |