summaryrefslogtreecommitdiff
path: root/plugins/ping.py
blob: b3ba8fb14db56dcbe5d2a74763e35bef54ea1f0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from plugin import BasePlugin
from roster import roster
from common import safeJID
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 <jid>\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 <jid or nick>\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)', self.completion_ping)

    def command_ping(self, arg):
        if not arg:
            return
        jid = safeJID(arg)
        try:
            delay = self.core.xmpp.plugin['xep_0199'].ping(jid=jid, timeout=5)
        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, '', quotify=False)

    def command_private_ping(self, arg):
        if arg:
            self.command_ping(arg)
        self.command_ping(self.core.current_tab().get_name())

    def command_muc_ping(self, arg):
        if not arg.strip():
            return
        user = self.core.current_tab().get_user_by_name(arg)
        if user:
            jid = safeJID(self.core.current_tab().get_name())
            jid.resource = user.nick
        else:
            jid = safeJID(arg)
        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, '', quotify=False)