Files
cproof-plugins/clients.py
2016-07-24 02:42:57 +01:00

102 lines
2.2 KiB
Python

import prof
import xml.etree.ElementTree as ET
clients_win = "Clients"
iq_id_count = 1
def _handle_win_input(win, command):
pass
def _create_win():
if prof.win_exists(clients_win) == False:
prof.win_create(clients_win, _handle_win_input)
def prof_on_iq_stanza_receive(stanza):
iq = ET.fromstring(stanza)
iq_id = iq.get("id")
if not iq_id:
return True
if not iq_id.startswith("clients_"):
return True
iq_type = iq.get("type")
if not iq_type:
return True
if iq_type != "result":
return True
iq_from = iq.get("from")
if not iq_from:
return True
query = iq.find("{jabber:iq:version}query")
if query is None:
return True
name = query.find("{jabber:iq:version}name")
version = query.find("{jabber:iq:version}version")
if name is None and version is None:
return True
message = iq_from.split("/")[1]
if name is not None:
message = message + ", " + name.text
if version is not None:
message = message + ", " + version.text
prof.win_show(clients_win, message)
return False
def _sv_send(muc, occupant):
global iq_id_count
iq = ET.Element("iq", {
"type": "get",
"to": muc + "/" + occupant,
"id": "clients_" + str(iq_id_count)
})
ET.SubElement(iq, "query", {
"xmlns": "jabber:iq:version"
})
iq_id_count = iq_id_count + 1
prof.send_stanza(ET.tostring(iq))
def _cmd_clients():
muc = prof.get_current_muc()
if muc == None:
prof.cons_show("Command only valid in chat rooms.")
return
occupants = prof.get_current_occupants()
if occupants == None or len(occupants) == 0:
prof.cons_show("No occupants for /clients command.")
return
nick = prof.get_current_nick()
_create_win()
prof.win_focus(clients_win)
for occupant in occupants:
if nick != occupant:
_sv_send(muc, occupant)
def prof_init(version, status, account_name, fulljid):
synopsis = [
"/clients"
]
description = "Show client software used by chat room occupants"
args = []
examples = []
prof.register_command("/clients", 0, 0, synopsis, description, args, examples, _cmd_clients)