Fix #3204 (write a /server_part plugin)
This commit is contained in:
parent
a6c4db6c2f
commit
b00d2fd2bc
3 changed files with 74 additions and 0 deletions
|
@ -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
|
||||
|
|
6
doc/source/plugins/server_part.rst
Normal file
6
doc/source/plugins/server_part.rst
Normal file
|
@ -0,0 +1,6 @@
|
|||
.. _serverpart-plugin:
|
||||
|
||||
Server Part
|
||||
===========
|
||||
|
||||
.. automodule:: server_part
|
62
plugins/server_part.py
Normal file
62
plugins/server_part.py
Normal 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, ' ')
|
Loading…
Reference in a new issue