comitting activity tracking for ze admins

This commit is contained in:
jenz 2026-02-10 16:01:56 +01:00
parent 5f3adb6251
commit 69e0d95361
4 changed files with 190 additions and 0 deletions

View File

@ -0,0 +1,150 @@
#!/home/nonroot/stoat_admin_activity_ze/venv/bin/python3
from settings import get_connection_unloze_playtime, get_connection_sourceban, stoat_token, stoat_url
import requests
from datetime import datetime
def get_admin_list_ze():
with get_connection_sourceban() as conn:
with conn.cursor() as cur:
#32 means ze and -1 means a game category, i.e css.
sql_statement = f"""
select unique(sa.user), sa.authid
from unloze_sourceban.sb_admins sa
inner join unloze_sourceban.sb_admins_servers_groups ss
on sa.aid = ss.admin_id
where sa.srv_group not in ('Game-Donator', '')
and (ss.server_id = 32 or ss.srv_group_id != -1)
order by sa.`user`
"""
cur.execute(sql_statement)
res = cur.fetchall()
if res is not None:
with get_connection_unloze_playtime() as conn:
with conn.cursor() as cur:
for index, result in enumerate(res):
player_time = 0
sql_statement = f"""
select pt.ze_time
from unloze_playtimestats.player_time pt
where pt.steam_id = %s
"""
cur.execute(sql_statement, [result[1]])
res1 = cur.fetchall()
for result1 in res1:
player_time += result1[0]
res[index] = res[index] + (player_time, )
return res
def get_admin_activity_ze():
with get_connection_unloze_playtime() as conn:
with conn.cursor() as cur:
sql_statement = f"""
select * from unloze_playtimestats.admin_activity_ze
"""
cur.execute(sql_statement)
res = cur.fetchall()
return res
def send_message_to_stoat(admin_activity, admins):
message = ""
admins_ordered_by_time = {}
if admin_activity:
took_time = False
admins_with_no_activity_found = False
for res in admin_activity:
name = res[0]
steam_id = res[1]
playtime = res[2]
date_began = res[3]
if not took_time:
took_time = True
message += f"Started Time Tracking from **{date_began} until {datetime.now()}** for Zombie Escape:\n\n"
for admin in admins:
if admin[1] == steam_id:
playtime_since_last_week = admin[2] - playtime
hours_server = int((playtime_since_last_week / 60) / 60)
minutes_server = int((playtime_since_last_week / 60) % 60)
admins_ordered_by_time[steam_id] = [name, playtime_since_last_week, hours_server, minutes_server]
break
sorted_admins = sorted(admins_ordered_by_time.items(), key=lambda x: x[1][1], reverse=True)
for steam_id, data in sorted_admins:
name, playtime_since_last_week, hours, minutes = data
if not admins_with_no_activity_found and playtime_since_last_week == 0:
admins_with_no_activity_found = True
message += "///**Admins Below here have no activity at all**\\\\\ \n\n\n"
message += f"{name} ({steam_id}) Playtime: {hours} hours and {minutes} minutes.\n\n"
#print(message)
else:
message = "This is the beginning of tracking admin activity on ze. the Intention is once every week to report how much playtime each admin and staff had on zombie escape. Tracking starts today and the first results will presumably be posted here on Sunday. Going forward probably every sunday."
headers = {
"x-bot-token": f"{stoat_token}",
"Content-Type": "application/json"
}
message_chunks = split_message_by_lines(message)
for chunk in message_chunks:
data = {
"content": chunk
}
response = requests.post(stoat_url, headers=headers, json=data)
if response.status_code > 299:
print(response.status_code, " ", response.text)
#AI slop function
def split_message_by_lines(message, limit=1900):
lines = message.split('\n')
chunks = []
current_chunk = ""
for line in lines:
# Check if adding this line (plus a newline) exceeds the limit
if len(current_chunk) + len(line) + 1 > limit:
if current_chunk:
chunks.append(current_chunk.strip())
current_chunk = line + '\n'
else:
current_chunk += line + '\n'
# Add the final remaining chunk
if current_chunk:
chunks.append(current_chunk.strip())
return chunks
def truncate_admin_activity_ze():
with get_connection_unloze_playtime() as conn:
with conn.cursor() as cur:
sql_statement = f"""
truncate table unloze_playtimestats.admin_activity_ze
"""
cur.execute(sql_statement)
conn.commit()
def insert_admin_activity_ze(admins):
with get_connection_unloze_playtime() as conn:
with conn.cursor() as cur:
for admin in admins:
sql_statement = f"""
INSERT INTO unloze_playtimestats.admin_activity_ze
(name, steamid, ze_time_start_week, inserted_on)
VALUES(%s, %s, %s, current_timestamp());
"""
cur.execute(sql_statement, [admin[0], admin[1], admin[2]])
conn.commit()
def main():
admins = get_admin_list_ze()
admin_activity = get_admin_activity_ze()
send_message_to_stoat(admin_activity, admins)
truncate_admin_activity_ze()
insert_admin_activity_ze(admins)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,21 @@
import mysql.connector
#https://pypi.org/project/mysql-connector-python/
stoat_token = ""
stoat_url = ""
def get_connection_unloze_playtime():
return mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="",
password="")
def get_connection_sourceban():
return mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="",
password="")

View File

@ -0,0 +1,10 @@
[Unit]
Description=runs admin activity ze checks for stoat
[Service]
Type=simple
User=nonroot
Environment=PYTHONUNBUFFERED=1
Environment=PATH=/home/nonroot/stoat_admin_activity_ze/venv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
WorkingDirectory=/home/nonroot/stoat_admin_activity_ze
ExecStart=/home/nonroot/stoat_admin_activity_ze/main.py

View File

@ -0,0 +1,9 @@
[Unit]
Description=writes a message once a week on stoat about the admin activity on ze
[Timer]
OnCalendar=Sun *-*-* 12:00:00
[Install]
WantedBy=multi-user.target