XEP-0425: Message Moderation
This commit is contained in:
		@@ -96,6 +96,7 @@ __all__ = [
 | 
			
		||||
    'xep_0421',  # Anonymous unique occupant identifiers for MUCs
 | 
			
		||||
    'xep_0422',  # Message Fastening
 | 
			
		||||
    'xep_0424',  # Message Retraction
 | 
			
		||||
    'xep_0425',  # Message Moderation
 | 
			
		||||
    'xep_0428',  # Message Fallback
 | 
			
		||||
    'xep_0444',  # Message Reactions
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								slixmpp/plugins/xep_0425/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								slixmpp/plugins/xep_0425/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
"""
 | 
			
		||||
    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.plugins.base import register_plugin
 | 
			
		||||
from slixmpp.plugins.xep_0425.stanza import *
 | 
			
		||||
from slixmpp.plugins.xep_0425.moderation import XEP_0425
 | 
			
		||||
 | 
			
		||||
register_plugin(XEP_0425)
 | 
			
		||||
							
								
								
									
										39
									
								
								slixmpp/plugins/xep_0425/moderation.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								slixmpp/plugins/xep_0425/moderation.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
"""
 | 
			
		||||
    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 typing import Optional
 | 
			
		||||
 | 
			
		||||
from slixmpp import JID, Message
 | 
			
		||||
from slixmpp.exceptions import IqError, IqTimeout
 | 
			
		||||
from slixmpp.plugins import BasePlugin
 | 
			
		||||
from slixmpp.plugins.xep_0425 import stanza
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class XEP_0425(BasePlugin):
 | 
			
		||||
    '''XEP-0425: Message Moderation'''
 | 
			
		||||
 | 
			
		||||
    name = 'xep_0425'
 | 
			
		||||
    description = 'Message Moderation'
 | 
			
		||||
    dependencies = {'xep_0424', 'xep_0421'}
 | 
			
		||||
    stanza = stanza
 | 
			
		||||
    namespace = stanza.NS
 | 
			
		||||
 | 
			
		||||
    def plugin_init(self) -> None:
 | 
			
		||||
        stanza.register_plugins()
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
 | 
			
		||||
    async def moderate(self, room: JID, id: str, reason: str = '', *,
 | 
			
		||||
                       ifrom: Optional[JID] = None, **iqkwargs):
 | 
			
		||||
        iq = self.xmpp.make_iq_set(ito=room.bare, ifrom=ifrom)
 | 
			
		||||
        iq['apply_to']['id'] = id
 | 
			
		||||
        iq['apply_to']['moderate']['reason'] = reason
 | 
			
		||||
        await iq.send(**iqkwargs)
 | 
			
		||||
							
								
								
									
										46
									
								
								slixmpp/plugins/xep_0425/stanza.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								slixmpp/plugins/xep_0425/stanza.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
"""
 | 
			
		||||
    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 permissio
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from slixmpp.stanza import Message, Iq
 | 
			
		||||
from slixmpp.xmlstream import (
 | 
			
		||||
    ElementBase,
 | 
			
		||||
    register_stanza_plugin,
 | 
			
		||||
)
 | 
			
		||||
from slixmpp.plugins.xep_0422.stanza import ApplyTo
 | 
			
		||||
from slixmpp.plugins.xep_0421.stanza import OccupantId
 | 
			
		||||
from slixmpp.plugins.xep_0424.stanza import Retract, Retracted
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
NS = 'urn:xmpp:message-moderate:0'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Moderate(ElementBase):
 | 
			
		||||
    namespace = NS
 | 
			
		||||
    name = 'moderate'
 | 
			
		||||
    plugin_attrib = 'moderate'
 | 
			
		||||
    interfaces = {'reason'}
 | 
			
		||||
    sub_interfaces = {'reason'}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Moderated(ElementBase):
 | 
			
		||||
    namespace = NS
 | 
			
		||||
    name = 'moderated'
 | 
			
		||||
    plugin_attrib = 'moderated'
 | 
			
		||||
    interfaces = {'reason', 'by'}
 | 
			
		||||
    sub_interfaces = {'reason'}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def register_plugins():
 | 
			
		||||
    register_stanza_plugin(Iq, ApplyTo)
 | 
			
		||||
    register_stanza_plugin(ApplyTo, Moderate)
 | 
			
		||||
    register_stanza_plugin(Moderate, Retract)
 | 
			
		||||
 | 
			
		||||
    register_stanza_plugin(Message, Moderated)
 | 
			
		||||
    register_stanza_plugin(ApplyTo, Moderated)
 | 
			
		||||
    register_stanza_plugin(Moderated, Retracted)
 | 
			
		||||
    register_stanza_plugin(Moderated, OccupantId)
 | 
			
		||||
		Reference in New Issue
	
	Block a user