summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/plugins/index.rst6
-rw-r--r--plugins/regex_admin.py80
2 files changed, 86 insertions, 0 deletions
diff --git a/doc/source/plugins/index.rst b/doc/source/plugins/index.rst
index 0e39feab..80fb6f9a 100644
--- a/doc/source/plugins/index.rst
+++ b/doc/source/plugins/index.rst
@@ -173,6 +173,11 @@ Plugin index
Gets the uptime of a XMPP server or a component.
+ Regex Admin
+ :ref:`Documentation <regex-admin-plugin>`
+
+ Add regex-based kick and ban commands.
+
Replace
:ref:`Documentation <replace-plugin>`
@@ -230,3 +235,4 @@ Plugin index
double
shuffle
iq_show
+ regex_admin
diff --git a/plugins/regex_admin.py b/plugins/regex_admin.py
new file mode 100644
index 00000000..dbd5e49f
--- /dev/null
+++ b/plugins/regex_admin.py
@@ -0,0 +1,80 @@
+"""
+This plugins adds a :term:`/rkick` and a :term:`/rban` command,
+in order to kick/ban according to a regex on a nick.
+
+Installation
+------------
+
+You only have to load the plugin:
+
+``/load regex_admin``
+
+Commands
+--------
+
+Those commands take a regular expression (as defined in the
+`re module documentation`_) as a parameter.
+
+For roles
+~~~~~~~~~
+
+.. glossary::
+ :sorted:
+
+ /rkick
+
+ Kick a participant using a regex.
+
+
+ /rban
+
+ Ban a participant using a regex.
+
+.. _re module documentation: http://docs.python.org/3/library/re.html
+"""
+
+
+from plugin import BasePlugin
+from tabs import MucTab
+
+import re
+
+class Plugin(BasePlugin):
+ def init(self):
+ self.api.add_tab_command(MucTab, 'rkick',
+ self.command_rkick,
+ usage='<regex>',
+ help='Kick occupants of a room according to a regex',
+ short='Regex Kick')
+
+ self.api.add_tab_command(MucTab, 'rban',
+ self.command_rban,
+ usage='<regex>',
+ help='Ban occupants of a room according to a regex',
+ short='Regex Ban')
+
+ def return_users(self, users, regex):
+ try:
+ reg = re.compile(regex)
+ except:
+ return []
+
+ ret = []
+ for user in users:
+ if reg.match(user.nick):
+ ret.append(user)
+
+ return ret
+
+ def command_rban(self, regex):
+ tab = self.api.current_tab()
+ users = self.return_users(tab.users, regex)
+ for user in users:
+ tab.command_ban(user.nick)
+
+ def command_rkick(self, regex):
+ tab = self.api.current_tab()
+ users = self.return_users(tab.users, regex)
+ for user in users:
+ tab.command_kick(user.nick)
+