modified: bot.py

This commit is contained in:
SimolZimol
2026-06-22 17:56:50 +02:00
parent 96f68c08ce
commit fa4a54d95f

80
bot.py
View File

@@ -4428,44 +4428,98 @@ def create_mutes_table():
close_database_connection(connection)
async def save_mute_to_database(user_id, guild_id, moderator_id, reason, duration, start_time, end_time,
process_uuid=None, channel_id=None, mute_role_id=None, message_data=None, message_id=None):
"""Saves individual mute records to the database with optional message data and context"""
process_uuid=None, channel_id=None, mute_role_id=None, message_data=None, message_id=None):
"""Saves individual mute records to the database with optional message data and context.
Attachments are stored as local file paths instead of Discord CDN links."""
connection = None
cursor = None
try:
connection = connect_to_database()
cursor = connection.cursor()
# Extract message data if provided
message_content = None
message_attachments = None
message_author_id = None
message_channel_id = None
context_messages = None
def extract_local_attachments(raw_attachments):
"""
Converts raw attachment data to local-path-only format.
Strips Discord CDN URLs and only keeps locally saved file info.
raw_attachments can be a JSON string or a list of dicts.
"""
if not raw_attachments:
return None
if isinstance(raw_attachments, str):
try:
attachments_list = json.loads(raw_attachments)
except Exception:
return raw_attachments # Return as-is if not parseable
else:
attachments_list = raw_attachments
if not isinstance(attachments_list, list):
return None
cleaned = []
for att in attachments_list:
if not isinstance(att, dict):
continue
entry = {
"filename": att.get("filename", "unknown"),
"content_type": att.get("content_type", "application/octet-stream"),
"size": att.get("size"),
"saved_permanently": att.get("saved_permanently", False)
}
# Only store local_path — no Discord CDN URLs
local_path = att.get("local_path")
if local_path:
entry["local_path"] = local_path
else:
# No local file saved — note it but don't store the expiring URL
entry["local_path"] = None
entry["saved_permanently"] = False
# Optionally keep the original filename/attachment ID for reference
if att.get("attachment_id"):
entry["attachment_id"] = att.get("attachment_id")
cleaned.append(entry)
return json.dumps(cleaned) if cleaned else None
if message_data:
if isinstance(message_data, dict) and "main_message" in message_data:
# New format with context
main_msg = message_data.get("main_message", {})
message_content = main_msg.get("content")
message_attachments = main_msg.get("attachments")
message_author_id = main_msg.get("author_id")
message_channel_id = main_msg.get("channel_id")
context_messages = json.dumps(message_data.get("context_messages", []))
# Use local paths only, not Discord URLs
message_attachments = extract_local_attachments(main_msg.get("attachments"))
# Also clean attachments in context_messages before saving
raw_context = message_data.get("context_messages", [])
cleaned_context = []
for ctx_msg in raw_context:
ctx_copy = dict(ctx_msg)
ctx_copy["attachments"] = extract_local_attachments(ctx_msg.get("attachments"))
cleaned_context.append(ctx_copy)
context_messages = json.dumps(cleaned_context)
else:
# Old format or simple dict
message_content = message_data.get("content")
message_attachments = message_data.get("attachments")
message_author_id = message_data.get("author_id")
message_channel_id = message_data.get("channel_id")
# Convert JSON fields
if message_attachments and isinstance(message_attachments, str):
# Already JSON string
pass
elif message_attachments:
# Convert to JSON string
message_attachments = json.dumps(message_attachments)
# Use local paths only
message_attachments = extract_local_attachments(message_data.get("attachments"))
insert_query = """
INSERT INTO user_mutes (