#!/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)