diff options
-rw-r--r-- | doc/source/plugins/index.rst | 6 | ||||
-rw-r--r-- | plugins/regex_admin.py | 80 |
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) + |