Source code for slixmpp.plugins.xep_0424.retraction
# Slixmpp: The Slick XMPP Library
# Copyright (C) 2020 Mathieu Pasquet <mathieui@mathieui.net>
# This file is part of Slixmpp.
# See the file LICENSE for copying permission.
from slixmpp import JID, Message
from slixmpp.xmlstream.matcher import StanzaPath
from slixmpp.xmlstream.handler import Callback
from slixmpp.plugins import BasePlugin
from slixmpp.plugins.xep_0424 import stanza
DEFAULT_FALLBACK = (
'This person attempted to retract a previous message, but your client '
'does not support it.'
)
[docs]
class XEP_0424(BasePlugin):
'''XEP-0424: Message Retraction'''
name = 'xep_0424'
description = 'XEP-0424: Message Retraction'
dependencies = {'xep_0422', 'xep_0030', 'xep_0359', 'xep_0428', 'xep_0334'}
stanza = stanza
namespace = stanza.NS
def plugin_init(self) -> None:
stanza.register_plugins()
self.xmpp.register_handler(Callback(
"Message Retracted",
StanzaPath("message/retract"),
self._handle_retract_message,
))
def session_bind(self, jid):
self.xmpp.plugin['xep_0030'].add_feature(feature=stanza.NS)
def plugin_end(self):
self.xmpp.plugin['xep_0030'].del_feature(feature=stanza.NS)
def _handle_retract_message(self, message: Message):
self.xmpp.event('message_retract', message)
[docs]
def send_retraction(self, mto: JID, id: str, mtype: str = 'chat',
include_fallback: bool = True,
fallback_text: str | None = None, *,
mfrom: JID | None = None) -> Message:
"""
Send a message retraction
:param JID mto: The JID to retract the message from
:param str id: Message ID to retract
:param str mtype: Message type
:param bool include_fallback: Whether to include a fallback body
:param str | None fallback_text: The content of the fallback
body. None will set the default value.
:returns: The sent retraction message.
"""
if fallback_text is None:
fallback_text = DEFAULT_FALLBACK
msg = self.xmpp.make_message(mto=mto, mtype=mtype, mfrom=mfrom)
if include_fallback:
msg['body'] = fallback_text
msg.enable('fallback')
msg['retract']['id'] = id
msg.enable('store')
msg.send()
return msg