From ef6425b4e97f47b5855c12cf0f81ca2d4cc1a4b1 Mon Sep 17 00:00:00 2001 From: mathieui Date: Tue, 15 Nov 2011 01:15:08 +0100 Subject: Add a /ping command through a ping plugin Fixes #1734 --- plugins/ping.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 plugins/ping.py diff --git a/plugins/ping.py b/plugins/ping.py new file mode 100644 index 00000000..349b7f52 --- /dev/null +++ b/plugins/ping.py @@ -0,0 +1,53 @@ +from plugin import BasePlugin +from sleekxmpp.xmlstream.jid import JID +from roster import roster +import common +import tabs + + +class Plugin(BasePlugin): + def init(self): + self.core.xmpp.register_plugin('xep_0199') + self.add_command('ping', self.command_ping, '/ping \nPing: Send a XMPP ping to jid (see XEP-0199).', self.completion_ping) + self.add_tab_command(tabs.MucTab, 'ping', self.command_muc_ping, '/ping \nPing: Send a XMPP ping to jid or nick (see XEP-0199)', self.completion_muc_ping) + self.add_tab_command(tabs.PrivateTab, 'ping', self.command_private_ping, '/ping\nPing: Send a XMPP ping to the current interlocutor (see XEP-0199)') + self.add_tab_command(tabs.ConversationTab, 'ping', self.command_private_ping, '/ping\nPing: Send a XMPP ping to the current interlocutor (see XEP-0199)') + + def command_ping(self, arg): + if not arg: + return + jid = JID(arg) + try: + delay = self.core.xmpp.plugin['xep_0199'].send_ping(jid=jid) + except: + delay = None + if delay is not None: + self.core.information('%s responded to ping after %s s' % (jid, round(delay, 4)), 'Info') + else: + self.core.information('%s did not respond to ping' % jid, 'Info') + + def completion_muc_ping(self, the_input): + users = [user.nick for user in self.core.current_tab().users] + l = [contact.bare_jid for contact in roster.get_contacts()] + users.extend(l) + return the_input.auto_completion(users, '') + + def command_private_ping(self, arg): + self.command_ping(self.core.current_tab().get_name()) + + def command_muc_ping(self, arg): + args = common.shell_split(arg) + if not args: + return + user = self.core.current_tab().get_user_by_name(args[0]) + if user: + jid = JID(self.core.current_tab().get_name()) + jid.resource = user.nick + else: + jid = JID(args[0]) + self.command_ping(jid.full) + + def completion_ping(self, the_input): + l = [contact.bare_jid for contact in roster.get_contacts()] + return the_input.auto_completion(l, '') + -- cgit v1.2.3