diff --git a/plugins/disco.py b/plugins/disco.py index ec0a04cd..368b35d8 100644 --- a/plugins/disco.py +++ b/plugins/disco.py @@ -16,6 +16,7 @@ Usage """ from poezio.plugin import BasePlugin +from poezio.decorators import command_args_parser from slixmpp.jid import InvalidJID @@ -24,11 +25,11 @@ class Plugin(BasePlugin): self.api.add_command( 'disco', self.command_disco, - usage='', + usage=' [node] [info|items]', short='Get the disco#info of a JID', help='Get the disco#info of a JID') - def on_disco(self, iq): + def on_info(self, iq): if iq['type'] == 'error': self.api.information(iq['error']['text'] or iq['error']['condition'], 'Error') return @@ -53,9 +54,44 @@ class Plugin(BasePlugin): if server_info: self.api.information('\n'.join(server_info), title) - def command_disco(self, jid): + def on_items(self, iq): + if iq['type'] == 'error': + self.api.information(iq['error']['text'] or iq['error']['condition'], 'Error') + return + + def describe(item): + text = item[0] + node = item[1] + name = item[2] + if node is not None: + text += ', node=' + node + if name is not None: + text += ', name=' + name + return text + + items = iq['disco_items'] + self.api.information('\n'.join(describe(item) for item in items['items']), 'Items') + + @command_args_parser.quoted(1, 3) + def command_disco(self, args): + if args is None: + self.core.command.help('disco') + return + if len(args) == 1: + jid, = args + node = None + type_ = 'info' + elif len(args) == 2: + jid, node = args + type_ = 'info' + else: + jid, node, type_ = args try: - self.core.xmpp.plugin['xep_0030'].get_info( - jid=jid, cached=False, callback=self.on_disco) + if type_ == 'info': + self.core.xmpp.plugin['xep_0030'].get_info( + jid=jid, node=node, cached=False, callback=self.on_info) + elif type_ == 'items': + self.core.xmpp.plugin['xep_0030'].get_items( + jid=jid, node=node, cached=False, callback=self.on_items) except InvalidJID as e: self.api.information('Invalid JID ā€œ%sā€: %s' % (jid, e), 'Error')