adding embed and map pictures to map notifications

This commit is contained in:
jenz 2026-02-25 17:05:27 +01:00
parent 8a5b46565f
commit fa3405d51b

View File

@ -10,18 +10,21 @@ from flask_cors import CORS
from werkzeug.middleware.proxy_fix import ProxyFix from werkzeug.middleware.proxy_fix import ProxyFix
import threading import threading
import time import time
import difflib
app = Flask(__name__) app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1) app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1)
CORS(app) CORS(app)
map_images = []
#runs every 3 minutes to inform about a new map #runs every 3 minutes to inform about a new map
def insert_maps(fixed): def insert_maps(fixed_param):
with get_connection_unloze_playtime() as conn: with get_connection_unloze_playtime() as conn:
with conn.cursor() as cur: with conn.cursor() as cur:
placeholders = ','.join(['(%s)'] * len(fixed)) placeholders = ','.join(['(%s)'] * len(fixed_param))
flattened_values = [row for row in fixed] flattened_values = [row for row in fixed_param]
sql_statement = f""" sql_statement = f"""
INSERT IGNORE INTO unloze_playtimestats.map_notifications INSERT IGNORE INTO unloze_playtimestats.map_notifications
(mapname) (mapname)
@ -126,7 +129,7 @@ def stoat_send_valid_map_notifications(thing, valid_map_notification_cmds):
} }
response = requests.post(stoat_url_map_notifications, headers=headers, json=data) response = requests.post(stoat_url_map_notifications, headers=headers, json=data)
def check_new_map_notification_status(fixed, last_msg_id): def check_new_map_notification_status(fixed_param, last_msg_id):
headers = { headers = {
"x-bot-token": stoat_token "x-bot-token": stoat_token
} }
@ -142,12 +145,18 @@ def check_new_map_notification_status(fixed, last_msg_id):
else: else:
response = requests.get(stoat_url_50_last_messages + last_msg_id, headers=headers) response = requests.get(stoat_url_50_last_messages + last_msg_id, headers=headers)
data = response.json() try:
data = response.json()
except:
#well that should not happen
err = traceback.format_exc()
print("err: ", err)
return None, None, None, None, None
for index, msg in enumerate(data['messages']): for index, msg in enumerate(data['messages']):
#print(msg) #print(msg)
msg_id = msg['_id'] msg_id = msg['_id']
author = msg['author'] author = msg['author']
content = msg['content']
last_msg_id = msg_id last_msg_id = msg_id
dont_process_bot_msg = False dont_process_bot_msg = False
for user in data['users']: for user in data['users']:
@ -157,16 +166,17 @@ def check_new_map_notification_status(fixed, last_msg_id):
if dont_process_bot_msg: continue if dont_process_bot_msg: continue
try: try:
content = msg['content']
if content.startswith("add "): if content.startswith("add "):
content = content.split("add ")[1] content = content.split("add ")[1]
if content in fixed: if content in fixed_param:
valid_map_notification_cmds_add.append([content, author]) valid_map_notification_cmds_add.append([content, author])
else: else:
invalid_map_notification_cmds.append([content, author]) invalid_map_notification_cmds.append([content, author])
elif content.startswith("remove "): elif content.startswith("remove "):
content = content.split("remove ")[1] content = content.split("remove ")[1]
if content in fixed: if content in fixed_param:
valid_map_notification_cmds_remove.append([content, author]) valid_map_notification_cmds_remove.append([content, author])
else: else:
invalid_map_notification_cmds.append([content, author]) invalid_map_notification_cmds.append([content, author])
@ -177,6 +187,7 @@ def check_new_map_notification_status(fixed, last_msg_id):
except: except:
err = traceback.format_exc() err = traceback.format_exc()
print("err: ", err) print("err: ", err)
print("msg in error: ", msg)
#print('valid_map_notification_cmds_add: ', valid_map_notification_cmds_add) #print('valid_map_notification_cmds_add: ', valid_map_notification_cmds_add)
#print('valid_map_notification_cmds_remove: ', valid_map_notification_cmds_remove) #print('valid_map_notification_cmds_remove: ', valid_map_notification_cmds_remove)
@ -208,10 +219,17 @@ def send_post_notify_message_to_stoat(list_of_people_to_notify, content, infomap
"x-bot-token": f"{stoat_token}", "x-bot-token": f"{stoat_token}",
"Content-Type": "application/json" "Content-Type": "application/json"
} }
match = difflib.get_close_matches(infomap, map_images, n=1, cutoff=0.6)
thumbnail_name = match[0] if match else "ze_atix_panic"
image_url = f"https://vauff.com/mapimgs/240/{thumbnail_name}.jpg"
data = { data = {
"content": message "content": image_url,
"embeds": [{
"description": message,
}]
} }
#print('messages: ', message)
response = requests.post(stoat_url_map_notifications, headers=headers, json=data) response = requests.post(stoat_url_map_notifications, headers=headers, json=data)
def update_last_msg_id(msg_id): def update_last_msg_id(msg_id):
@ -244,7 +262,6 @@ def got_new_map_to_announce():
try: try:
content = request.get_json()["content"] content = request.get_json()["content"]
#print('content: ', content) #print('content: ', content)
infomap = content.split("Map changed to: ")[1].split("\nPlayerCount:")[0] infomap = content.split("Map changed to: ")[1].split("\nPlayerCount:")[0]
list_of_people_to_notify = notify_of_new_map(infomap) list_of_people_to_notify = notify_of_new_map(infomap)
send_post_notify_message_to_stoat(list_of_people_to_notify, content, infomap) send_post_notify_message_to_stoat(list_of_people_to_notify, content, infomap)
@ -263,13 +280,18 @@ def main_loop():
bz2 = bz2.split('.bsp')[0] bz2 = bz2.split('.bsp')[0]
fixed.append(bz2) fixed.append(bz2)
r_map_images = requests.get("https://vauff.com/mapimgs/list.php")
d = r_map_images.json().get("240", [])
for map_img in d:
map_images.append(map_img)
#insert maps if they are not already. #insert maps if they are not already.
insert_maps(fixed) insert_maps(fixed)
#check last 5 messages for new map notification updates #check last 5 messages for new map notification updates
while True: while True:
last_msg_id = get_last_msg_id_read() last_msg_id = get_last_msg_id_read()
valid_map_notification_cmds_add, valid_map_notification_cmds_remove, invalid_map_notification_cmds, last_msg_id, show_map_notifications = check_new_map_notification_status(fixed, last_msg_id) valid_map_notification_cmds_add, valid_map_notification_cmds_remove, invalid_map_notification_cmds, last_msg_id, show_map_notifications = check_new_map_notification_status(fixed, last_msg_id)
if valid_map_notification_cmds_add: if valid_map_notification_cmds_add:
stoat_send_valid_map_notifications("added", valid_map_notification_cmds_add) stoat_send_valid_map_notifications("added", valid_map_notification_cmds_add)
@ -280,7 +302,8 @@ def main_loop():
if show_map_notifications: if show_map_notifications:
stoat_send_map_notification_list(show_map_notifications) stoat_send_map_notification_list(show_map_notifications)
update_last_msg_id(last_msg_id) if last_msg_id:
update_last_msg_id(last_msg_id)
time.sleep(5) time.sleep(5)
if __name__ == '__main__': if __name__ == '__main__':