diff --git a/stoat_admin_activity_ze/python/main.py b/stoat_admin_activity_ze/python/main.py new file mode 100755 index 0000000..46c577b --- /dev/null +++ b/stoat_admin_activity_ze/python/main.py @@ -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() diff --git a/stoat_admin_activity_ze/python/settings.py b/stoat_admin_activity_ze/python/settings.py new file mode 100644 index 0000000..de9727c --- /dev/null +++ b/stoat_admin_activity_ze/python/settings.py @@ -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="") diff --git a/stoat_admin_activity_ze/systemd/stoat_admin_activity_ze.service b/stoat_admin_activity_ze/systemd/stoat_admin_activity_ze.service new file mode 100644 index 0000000..01e3635 --- /dev/null +++ b/stoat_admin_activity_ze/systemd/stoat_admin_activity_ze.service @@ -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 diff --git a/stoat_admin_activity_ze/systemd/stoat_admin_activity_ze.timer b/stoat_admin_activity_ze/systemd/stoat_admin_activity_ze.timer new file mode 100644 index 0000000..fef884a --- /dev/null +++ b/stoat_admin_activity_ze/systemd/stoat_admin_activity_ze.timer @@ -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 +