diff --git a/doc/source/plugins/index.rst b/doc/source/plugins/index.rst index 0a66b803..578e832c 100644 --- a/doc/source/plugins/index.rst +++ b/doc/source/plugins/index.rst @@ -271,6 +271,11 @@ Plugin index Reproduce the behavior of the ```` html tag. + Server Part + :ref:`Documentation ` + + Add a ``/server_part`` command. + Dice :ref:`Documentation ` @@ -320,3 +325,4 @@ Plugin index csi dice marquee + server_part diff --git a/doc/source/plugins/server_part.rst b/doc/source/plugins/server_part.rst new file mode 100644 index 00000000..55494eca --- /dev/null +++ b/doc/source/plugins/server_part.rst @@ -0,0 +1,6 @@ +.. _serverpart-plugin: + +Server Part +=========== + +.. automodule:: server_part diff --git a/plugins/server_part.py b/plugins/server_part.py new file mode 100644 index 00000000..878001e7 --- /dev/null +++ b/plugins/server_part.py @@ -0,0 +1,62 @@ +""" +This plugin adds a ``/server_part`` command to leave all rooms +on a server. + +Command +------- + +.. glossary:: + + /server_part + **Usage:** ``/server_part [ [message]]`` + + Leave all rooms on ````, if not provided and the current + tab is a MUC tab, it will leave all rooms on the current server. + ``[message]`` can indicate a quit message. + + +""" +from poezio.plugin import BasePlugin +from poezio.tabs import MucTab +from poezio.decorators import command_args_parser +from poezio.common import safeJID +from poezio.core.structs import Completion + +class Plugin(BasePlugin): + def init(self): + self.api.add_command('server_part', self.command_server_part, + usage='[ [message]]', + short='Leave all the rooms on a server', + help='Leave all the rooms on a sever.', + completion=self.completion_server_part) + + @command_args_parser.quoted(0, 2, defaults=[]) + def command_server_part(self, args): + current_tab = self.api.current_tab() + if not args and not isinstance(current_tab, MucTab): + return self.core.command_help('server_part') + elif not args: + jid = safeJID(current_tab.name).bare + message = None + elif len(args) == 1: + jid = safeJID(args[0]).domain + if not jid: + return self.core.command_help('server_part') + message = None + else: + jid = safeJID(args[0]).domain + if not jid: + return self.core.command_help('server_part') + message = args[1] + + for tab in self.core.get_tabs(MucTab): + if tab.name.endswith(jid): + tab.command_part(message) + + def completion_server_part(self, the_input): + serv_list = set() + for tab in self.core.get_tabs(MucTab): + if tab.joined: + serv = safeJID(tab.name).server + serv_list.add(serv) + return Completion(the_input.new_completion, sorted(serv_list), 1, ' ')