#!/usr/bin/env python import requests, json import xml.etree.ElementTree as xml r = requests.get("http://localhost:8081/stats") r.raise_for_status() out = {} d = xml.fromstring(r.text) assert d.tag == "inspircdstats" def define(name,xps,vfilter=lambda x: x): global out out[name] = vfilter(d.findall(xps)[0].text) define("usercount","./general/usercount",int) define("channelcount","./general/channelcount",int) schannels = d.findall("./channellist/channel") #print(len(schannels)) channels = [] for schannel in schannels: channel = dict(name=schannel.findall("channelname")[0].text,usercount=int(schannel.findall("usercount")[0].text)) channel["topic"] = schannel.findall("./channeltopic/topictext")[0].text if schannel.findall("./channeltopic/topictext")[0].text is not None else "No topic set" # bugfix: if mode s is set and there's a topic, hide the topic if "s" in schannel.findall("./channelmodes")[0].text.split()[0] and channel["topic"]!="No topic set": channel["topic"]="Topic hidden" if channel["name"]=="#secret-sudoers": # no stat output for #secret-sudoers! it's a sekrit club of the ~team sysadmins! continue channel["webchatlink"] = "https://web.tilde.chat/?join="+channel["name"].lstrip("#") channels.append(channel) channels.sort(key=lambda x: x["name"].lower()) out["channels"]=channels #print([x.text for x in d.findall("./channellist/channel/channeltopic/topictext")]) with open("/var/www/tilde.chat/stats.json","w") as f: json.dump(out,f)