Fix #3204 (write a /server_part plugin)

This commit is contained in:
mathieui 2016-08-26 22:07:57 +02:00
parent a6c4db6c2f
commit b00d2fd2bc
3 changed files with 74 additions and 0 deletions

View file

@ -271,6 +271,11 @@ Plugin index
Reproduce the behavior of the ``<marquee/>`` html tag.
Server Part
:ref:`Documentation <serverpart-plugin>`
Add a ``/server_part`` command.
Dice
:ref:`Documentation <dice-plugin>`
@ -320,3 +325,4 @@ Plugin index
csi
dice
marquee
server_part

View file

@ -0,0 +1,6 @@
.. _serverpart-plugin:
Server Part
===========
.. automodule:: server_part

62
plugins/server_part.py Normal file
View file

@ -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 [<server> [message]]``
Leave all rooms on ``<server>``, 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='[<server> [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, ' ')