tilde.chat/gen_stats

33 lines
1.4 KiB
Plaintext
Raw Normal View History

2018-06-20 18:54:31 +00:00
#!/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"
2018-07-13 22:36:37 +00:00
# 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!
2018-06-20 18:54:31 +00:00
continue
channel["webchatlink"] = "https://web.tilde.chat/?join="+channel["name"].lstrip("#")
2018-06-20 18:54:31 +00:00
channels.append(channel)
2018-06-20 21:31:44 +00:00
channels.sort(key=lambda x: x["name"].lower())
2018-06-20 18:54:31 +00:00
out["channels"]=channels
#print([x.text for x in d.findall("./channellist/channel/channeltopic/topictext")])
2018-07-13 21:02:22 +00:00
with open("/var/www/tilde.chat/stats.json","w") as f:
2018-06-20 18:54:31 +00:00
json.dump(out,f)