XEP-0308: add utility functions
to build and correct messages without needing to go into the xml schema details.
This commit is contained in:
parent
8a127f61d0
commit
4cf1286332
@ -1,11 +1,12 @@
|
|||||||
|
|
||||||
# Slixmpp: The Slick XMPP Library
|
# Slixmpp: The Slick XMPP Library
|
||||||
# Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
|
# Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
|
||||||
# This file is part of Slixmpp.
|
# This file is part of Slixmpp.
|
||||||
# See the file LICENSE for copying permissio
|
# See the file LICENSE for copying permissio
|
||||||
import logging
|
import logging
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from slixmpp.stanza import Message
|
from slixmpp.stanza import Message
|
||||||
|
from slixmpp.jid import JID
|
||||||
from slixmpp.xmlstream.handler import Callback
|
from slixmpp.xmlstream.handler import Callback
|
||||||
from slixmpp.xmlstream.matcher import StanzaPath
|
from slixmpp.xmlstream.matcher import StanzaPath
|
||||||
from slixmpp.xmlstream import register_stanza_plugin
|
from slixmpp.xmlstream import register_stanza_plugin
|
||||||
@ -49,3 +50,54 @@ class XEP_0308(BasePlugin):
|
|||||||
|
|
||||||
def _handle_correction(self, msg: Message):
|
def _handle_correction(self, msg: Message):
|
||||||
self.xmpp.event('message_correction', msg)
|
self.xmpp.event('message_correction', msg)
|
||||||
|
|
||||||
|
def build_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_replace
|
||||||
|
return msg
|
||||||
|
|
||||||
|
def correct_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']
|
||||||
|
if not to_replace:
|
||||||
|
raise ValueError('No available ID for replacing the message')
|
||||||
|
if not mto:
|
||||||
|
raise ValueError('No available recipient JID')
|
||||||
|
|
||||||
|
new = self.build_correction(
|
||||||
|
id_to_replace=to_replace,
|
||||||
|
mto=mto,
|
||||||
|
mfrom=mfrom,
|
||||||
|
mtype=mtype,
|
||||||
|
mbody=body,
|
||||||
|
)
|
||||||
|
new.send()
|
||||||
|
return new
|
||||||
|
Loading…
x
Reference in New Issue
Block a user