chore: nettoyage .gitignore - retrait venv, __pycache__, .env, data, logs, modèles du tracking
This commit is contained in:
parent
7333a22bcd
commit
604a5affe0
9231 changed files with 1244 additions and 1601201 deletions
83
core/log_parser.py
Normal file
83
core/log_parser.py
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
"""Action log parsing for context building."""
|
||||
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger('Beta')
|
||||
|
||||
|
||||
def get_recent_logs(limit: int = 15) -> str:
|
||||
"""Read and format recent action logs for context."""
|
||||
log_path = "data/actions.log"
|
||||
if not os.path.exists(log_path):
|
||||
return ""
|
||||
|
||||
try:
|
||||
with open(log_path, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
last_lines = lines[-limit:]
|
||||
|
||||
formatted_logs = []
|
||||
for line in last_lines:
|
||||
if "ACTION:" not in line:
|
||||
continue
|
||||
try:
|
||||
parts = line.split("ACTION:", 1)
|
||||
if len(parts) <= 1:
|
||||
continue
|
||||
json_str = parts[1].strip()
|
||||
data = json.loads(json_str)
|
||||
|
||||
timestamp = data.get("timestamp", "").split("T")[1].split(".")[0]
|
||||
action = data.get("action", "UNKNOWN")
|
||||
user = data.get("user", "System")
|
||||
params = data.get("params", {})
|
||||
success = data.get("success", True)
|
||||
|
||||
details = _format_action_details(action, params)
|
||||
status = "\u2705" if success else "\u274c"
|
||||
formatted_logs.append(f"[{timestamp}] {status} {action} {details} by {user}")
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
if not formatted_logs:
|
||||
return ""
|
||||
|
||||
return "\n[M\u00c9MOIRE DES ACTIONS R\u00c9CENTES (V\u00c9RIT\u00c9)]\n" + "\n".join(formatted_logs) + "\n"
|
||||
except Exception as e:
|
||||
logger.error(f"Error reading actions log: {e}")
|
||||
return ""
|
||||
|
||||
|
||||
def _format_action_details(action: str, params: dict) -> str:
|
||||
"""Format action-specific details for log display."""
|
||||
if action == 'SEND_MESSAGE':
|
||||
target = params.get('channel_id') or params.get('user_id')
|
||||
content = params.get('content', '')[:20]
|
||||
return f"(to: {target}, content: {content}...)"
|
||||
|
||||
if 'CHANNEL' in action:
|
||||
items = params.get('channels', [])
|
||||
if items:
|
||||
names = [i.get('channel_name', 'unknown') for i in items]
|
||||
return f"(channels: {', '.join(names)})"
|
||||
|
||||
if 'ROLE' in action:
|
||||
items = params.get('roles', [])
|
||||
if items:
|
||||
names = [i.get('role_name', 'unknown') for i in items]
|
||||
return f"(roles: {', '.join(names)})"
|
||||
|
||||
if action in ('KICK', 'BAN', 'WARN', 'MUTE', 'TIMEOUT'):
|
||||
target = params.get('user_id', 'unknown')
|
||||
reason = params.get('reason', 'no reason')
|
||||
return f"(target: {target}, reason: {reason})"
|
||||
|
||||
if action == 'PURGE':
|
||||
purges = params.get('purges', [])
|
||||
if purges:
|
||||
p = purges[0]
|
||||
return f"(channel: {p.get('channel_name')}, amount: {p.get('amount')})"
|
||||
|
||||
return ""
|
||||
Loading…
Add table
Add a link
Reference in a new issue