|
@@ -15,25 +15,59 @@ def get_users():
|
|
|
login = ("login %s %s\n" % (cfg["user"], cfg["pass"])).encode("utf-8")
|
|
|
|
|
|
with Telnet(cfg["host"], cfg["port"], 5) as tn:
|
|
|
+ print("connection")
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+ print("----")
|
|
|
+
|
|
|
tn.write(login)
|
|
|
+ print("after login")
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+ print("----")
|
|
|
+
|
|
|
tn.write(b"use 1 -virtual\n")
|
|
|
+ print("after use")
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+ print("----")
|
|
|
+
|
|
|
tn.write(b"clientlist\n")
|
|
|
- tn.write(b"whoami\n")
|
|
|
+ response = tn.read_until(b"\n").decode("ascii")
|
|
|
+ print("after clientlist")
|
|
|
+ print(response)
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+ print("----")
|
|
|
+
|
|
|
+ # TODO clean this nicely
|
|
|
+ client_info = {info["client_nickname"]: info for info in [{k: v for k, v in [i.split("=", 1) for i in ent.split()]} for ent in response.split("|")] if "serveradmin" not in info["client_nickname"]}
|
|
|
+
|
|
|
+ for k, v in client_info.items():
|
|
|
+ tn.write(f"clientinfo clid={v['clid']}\n".encode("utf-8"))
|
|
|
+ response = tn.read_until(b"\n").decode("ascii")
|
|
|
+ print(f"after clientinfo for {k}")
|
|
|
+ print(response)
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+ print("----")
|
|
|
+ v["client_info"] = {k: v for k, v in [ent.split("=", 1) for ent in response.split() if "=" in ent]}
|
|
|
+
|
|
|
tn.write(b"quit\n")
|
|
|
- response = tn.read_until(b"virtualserver_status").decode("ascii")
|
|
|
+ print("after quit")
|
|
|
+ print(tn.read_until(b"\n").decode("ascii"))
|
|
|
+
|
|
|
+ import pprint
|
|
|
+ pprint.pprint(client_info)
|
|
|
|
|
|
- return [x.split("=", 1)[1] for x in response.split()
|
|
|
- if x.startswith("client_nickname") and "serveradmin" not in x]
|
|
|
+ return client_info
|
|
|
|
|
|
|
|
|
@app.route("/")
|
|
|
def get_status():
|
|
|
- return jsonify({"users": get_users()})
|
|
|
+ return jsonify({"users": list(get_users().keys())})
|
|
|
|
|
|
|
|
|
@app.route("/page")
|
|
|
def get_status_page():
|
|
|
- users = get_users()
|
|
|
+ info = get_users()
|
|
|
+ users = list(info.keys())
|
|
|
if len(users) == 0:
|
|
|
text = "No one in teamspeak!"
|
|
|
elif len(users) == 1:
|
|
@@ -76,4 +110,5 @@ def get_status_page():
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
- app.run("0.0.0.0", 5000, debug=True, threaded=True)
|
|
|
+ print(get_users())
|
|
|
+ # app.run("0.0.0.0", 5000, debug=True, threaded=True)
|