Add a plugin for XEP-0377: spam reporting
This commit is contained in:
parent
04df50feac
commit
2e31de3f45
4 changed files with 120 additions and 0 deletions
|
@ -85,6 +85,7 @@ __all__ = [
|
|||
'xep_0323', # IoT Systems Sensor Data
|
||||
'xep_0325', # IoT Systems Control
|
||||
'xep_0332', # HTTP Over XMPP Transport
|
||||
'xep_0377', # Spam reporting
|
||||
'protoxep_reactions', # https://dino.im/xeps/reactions.html
|
||||
'protoxep_occupantid', # https://dino.im/xeps/occupant-id.html
|
||||
]
|
||||
|
|
15
slixmpp/plugins/xep_0377/__init__.py
Normal file
15
slixmpp/plugins/xep_0377/__init__.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
"""
|
||||
Slixmpp: The Slick XMPP Library
|
||||
Copyright (C) 2020 Mathieu Pasquet
|
||||
This file is part of Slixmpp.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from slixmpp.plugins.base import register_plugin
|
||||
|
||||
from slixmpp.plugins.xep_0377.stanza import Report
|
||||
from slixmpp.plugins.xep_0377.spam_reporting import XEP_0377
|
||||
|
||||
|
||||
register_plugin(XEP_0377)
|
41
slixmpp/plugins/xep_0377/spam_reporting.py
Normal file
41
slixmpp/plugins/xep_0377/spam_reporting.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
"""
|
||||
Slixmpp: The Slick XMPP Library
|
||||
Copyright (C) 2020 Mathieu Pasquet
|
||||
This file is part of Slixmpp.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
import slixmpp
|
||||
from slixmpp import Message
|
||||
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_0377 import stanza
|
||||
from slixmpp.plugins.xep_0191 import Block
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class XEP_0377(BasePlugin):
|
||||
"""XEP-0377: Spam reporting"""
|
||||
|
||||
name = 'xep_0377'
|
||||
description = 'XEP-0377: Spam Reporting'
|
||||
dependencies = {'xep_0030', 'xep_0191'}
|
||||
stanza = stanza
|
||||
|
||||
def plugin_init(self):
|
||||
register_stanza_plugin(Block, stanza.Report)
|
||||
register_stanza_plugin(stanza.Report, stanza.Text)
|
||||
|
||||
def plugin_end(self):
|
||||
self.xmpp['xep_0030'].del_feature(feature=stanza.Report.namespace)
|
||||
|
||||
def session_bind(self, jid):
|
||||
self.xmpp['xep_0030'].add_feature(stanza.Report.namespace)
|
||||
|
63
slixmpp/plugins/xep_0377/stanza.py
Normal file
63
slixmpp/plugins/xep_0377/stanza.py
Normal file
|
@ -0,0 +1,63 @@
|
|||
"""
|
||||
Slixmpp: The Slick XMPP Library
|
||||
Copyright (C) 2020 Mathieu Pasquet
|
||||
This file is part of Slixmpp.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from slixmpp.xmlstream import ET, ElementBase
|
||||
|
||||
|
||||
class Report(ElementBase):
|
||||
"""
|
||||
A spam/abuse report.
|
||||
|
||||
Example sub stanza:
|
||||
|
||||
<report xmlns="urn:xmpp:reporting:0">
|
||||
<text xml:lang="en">
|
||||
Never came trouble to my house like this.
|
||||
</text>
|
||||
<spam/>
|
||||
</report>
|
||||
|
||||
Stanza Interface:
|
||||
abuse -- Flag the report as abuse
|
||||
spam -- Flag the report as spam
|
||||
text -- Add a reason to the report
|
||||
"""
|
||||
name = "report"
|
||||
namespace = "urn:xmpp:reporting:0"
|
||||
plugin_attrib = "report"
|
||||
interfaces = ("spam", "abuse", "text")
|
||||
sub_interfaces = {'text'}
|
||||
|
||||
def get_spam(self):
|
||||
return self.xml.find('{%s}spam' % self.namespace) is not None
|
||||
|
||||
def set_spam(self, value):
|
||||
if bool(value) and not self.get_spam():
|
||||
self.xml.append(ET.Element('{%s}spam' % self.namespace))
|
||||
elif not bool(value):
|
||||
found = self.xml.findall('{%s}spam' % self.namespace)
|
||||
if elm:
|
||||
for item in found:
|
||||
self.xml.remove(item)
|
||||
|
||||
def get_abuse(self):
|
||||
return self.xml.find('{%s}abuse' % self.namespace) is not None
|
||||
|
||||
def set_abuse(self, value):
|
||||
if bool(value) and not self.get_abuse():
|
||||
self.xml.append(ET.Element('{%s}abuse' % self.namespace))
|
||||
elif not bool(value):
|
||||
found = self.xml.findall('{%s}abuse' % self.namespace)
|
||||
if elm:
|
||||
for item in found:
|
||||
self.xml.remove(item)
|
||||
|
||||
class Text(ElementBase):
|
||||
name = "text"
|
||||
plugin_attrib = "text"
|
||||
namespace = "urn:xmpp:reporting:0"
|
Loading…
Reference in a new issue