Source code for slixmpp.plugins.xep_0308.correction
# Slixmpp: The Slick XMPP Library# Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout# This file is part of Slixmpp.# See the file LICENSE for copying permissioimportloggingfromtypingimportOptionalfromslixmpp.stanzaimportMessagefromslixmpp.jidimportJIDfromslixmpp.xmlstream.handlerimportCallbackfromslixmpp.xmlstream.matcherimportStanzaPathfromslixmpp.xmlstreamimportregister_stanza_pluginfromslixmpp.pluginsimportBasePluginfromslixmpp.plugins.xep_0308importstanza,Replacelog=logging.getLogger(__name__)
[docs]classXEP_0308(BasePlugin):""" XEP-0308 Last Message Correction """name='xep_0308'description='XEP-0308: Last Message Correction'dependencies={'xep_0030'}stanza=stanzadefplugin_init(self):self.xmpp.register_handler(Callback('Message Correction',StanzaPath('message/replace'),self._handle_correction))register_stanza_plugin(Message,Replace)self.xmpp.use_message_ids=Truedefplugin_end(self):self.xmpp.remove_handler('Message Correction')self.xmpp.plugin['xep_0030'].del_feature(feature=Replace.namespace)defsession_bind(self,jid):self.xmpp.plugin['xep_0030'].add_feature(Replace.namespace)defis_correction(self,msg:Message):returnmsg.xml.find('{%s}replace'%Replace.namespace)isnotNonedef_handle_correction(self,msg:Message):self.xmpp.event('message_correction',msg)
[docs]defbuild_correction(self,id_to_replace:str,mto:JID,mfrom:Optional[JID]=None,mtype:str='chat',mbody:str='')->Message:""" Build a corrected message. :param id_to_replace: The id of the original message. :param mto: Recipient of the message, must be the same as the original message. :param mfrom: Sender of the message, must be the same as the original message. :param mtype: Type of the message, must be the send as the original message. :param mbody: The corrected message body. """msg=self.xmpp.make_message(mto=mto,mfrom=mfrom,mbody=mbody,mtype=mtype)msg['replace']['id']=id_to_replacereturnmsg
[docs]defcorrect_message(self,msg:Message,body:str)->Message:""" Send a correction to an existing message. :param msg: The message that must be replaced. :param body: The body to set in the correcting message. :returns: The message that was sent. """to_replace=msg['id']mto=msg['to']mfrom=msg['from']mtype=msg['type']ifnotto_replace:raiseValueError('No available ID for replacing the message')ifnotmto:raiseValueError('No available recipient JID')new=self.build_correction(id_to_replace=to_replace,mto=mto,mfrom=mfrom,mtype=mtype,mbody=body,)new.send()returnnew