Voice et bot modif
This commit is contained in:
parent
189d56026b
commit
7333a22bcd
10774 changed files with 634644 additions and 933308 deletions
80
brain/moderation.py
Normal file
80
brain/moderation.py
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
import sqlite3
|
||||
import datetime
|
||||
import logging
|
||||
from typing import Optional
|
||||
|
||||
logger = logging.getLogger('Superviseur')
|
||||
|
||||
DB_PATH = 'data/mod.db'
|
||||
|
||||
def init_db():
|
||||
"""Initialise la base de données de modération."""
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS infractions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT NOT NULL,
|
||||
username TEXT,
|
||||
guild_id TEXT,
|
||||
content TEXT,
|
||||
score REAL,
|
||||
reason TEXT,
|
||||
timestamp TEXT
|
||||
)
|
||||
''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
logger.info("✅ Base de données de modération initialisée.")
|
||||
|
||||
def log_infraction(user_id: str, username: str, guild_id: str, content: str, score: float, reason: str):
|
||||
"""Enregistre une note de modération en base de données."""
|
||||
try:
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
timestamp = datetime.datetime.now().isoformat()
|
||||
cursor.execute('''
|
||||
INSERT INTO infractions (user_id, username, guild_id, content, score, reason, timestamp)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (user_id, username, guild_id, content, score, reason, timestamp))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur lors de l'enregistrement de l'infraction: {e}")
|
||||
|
||||
async def scan_message_toxicity(llm_manager, content: str) -> Optional[dict]:
|
||||
"""
|
||||
Analyse le contenu d'un message via l'IA pour obtenir une note de toxicité.
|
||||
Retourne un dict {score, reason} ou None.
|
||||
"""
|
||||
if not content or len(content.strip()) < 3:
|
||||
return None
|
||||
|
||||
prompt = (
|
||||
"Analyse la toxicité de ce message Discord. "
|
||||
"Réponds UNIQUEMENT au format JSON suivant : "
|
||||
"{\"score\": <0.0 à 1.0>, \"reason\": \"brève explication\"}\n"
|
||||
"Un score de 0.0 est neutre/positif, 1.0 est extrêmement dégradant/toxique.\n"
|
||||
f"Message : \"{content}\""
|
||||
)
|
||||
|
||||
payload = {
|
||||
"prompt": prompt,
|
||||
"system_prompt": "Tu es un expert en modération. Sois objectif et juste.",
|
||||
"temperature": 0.1,
|
||||
"max_tokens": 300,
|
||||
"force_json": True,
|
||||
"stop": ["User:", "Assistant:"]
|
||||
}
|
||||
|
||||
try:
|
||||
# On utilise une version simplifiée de l'appel pour gagner du temps
|
||||
raw_resp = await llm_manager.call_llama(payload)
|
||||
import json
|
||||
data = json.loads(llm_manager.extract_json_actions(raw_resp) or "{}")
|
||||
if 'score' in data:
|
||||
return data
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur scan toxicité: {e}")
|
||||
|
||||
return None
|
||||
Loading…
Add table
Add a link
Reference in a new issue