forked from tildeverse/tilde.chat
50 lines
1.6 KiB
Python
Executable File
50 lines
1.6 KiB
Python
Executable File
#!/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)
|