Ajout de la gestion de l'édition des commandes Twitch et des logs de modération. Implémentation d'un endpoint pour modifier les commandes existantes avec validation des données et gestion des permissions. Ajout d'un endpoint pour récupérer les logs de modération récents, améliorant ainsi la traçabilité des actions. Mise à jour de l'interface pour intégrer un système de notifications et des animations.

This commit is contained in:
2026-03-04 19:38:05 +01:00
parent 4eb7f304dc
commit 77c3c11556
3 changed files with 598 additions and 611 deletions
+82
View File
@@ -182,6 +182,52 @@ def add_twitch_commande():
return redirect(url_for('twitch_moderation'))
@webapp.route("/twitch-moderation/edit/<int:cmd_id>", methods=['POST'])
@require_page("twitch_moderation")
def edit_twitch_commande(cmd_id):
if not can_write_page("twitch_moderation"):
return jsonify({"success": False, "error": "Permission refusée"}), 403
data = request.get_json()
if not data:
return jsonify({"success": False, "error": "Données invalides"}), 400
commande = Commande.query.get_or_404(cmd_id)
trigger = (data.get('trigger') or '').strip()
response = (data.get('response') or '').strip()
twitch_permission = data.get('twitch_permission', commande.twitch_permission or 'viewer')
if not trigger or not response:
return jsonify({"success": False, "error": "Commande et réponse requises"}), 400
if not trigger.startswith('!'):
trigger = '!' + trigger
if twitch_permission not in TWITCH_PERMISSIONS:
twitch_permission = 'viewer'
duplicate = Commande.query.filter(Commande.trigger == trigger, Commande.id != cmd_id).first()
if duplicate:
return jsonify({"success": False, "error": f"La commande {trigger} existe déjà"}), 409
commande.trigger = trigger
commande.response = response
commande.twitch_permission = twitch_permission
db.session.commit()
return jsonify({
"success": True,
"command": {
"id": commande.id,
"trigger": commande.trigger,
"response": commande.response,
"twitch_permission": commande.twitch_permission,
"permission_label": TWITCH_PERMISSIONS.get(commande.twitch_permission, 'Tous'),
}
})
@webapp.route("/twitch-moderation/banned-word/add", methods=['POST'])
@require_page("twitch_moderation")
def add_banned_word():
@@ -262,6 +308,42 @@ def get_twitch_messages():
messages = webapp.config["BOT_STATUS"].get("twitch_chat_messages", [])
return jsonify({"messages": messages})
@webapp.route("/twitch-moderation/logs/poll")
@require_page("twitch_moderation")
def poll_twitch_logs():
"""Retourne les logs de modération plus récents qu'un timestamp donné."""
since_str = request.args.get('since', '')
since = None
if since_str:
try:
since = datetime.fromisoformat(since_str)
except ValueError:
pass
query = TwitchModerationLog.query.order_by(TwitchModerationLog.created_at.desc())
if since:
query = query.filter(TwitchModerationLog.created_at > since)
logs = query.limit(20).all()
now = datetime.now().isoformat()
return jsonify({
"logs": [
{
"id": log.id,
"action": log.action,
"moderator": log.moderator,
"target": log.target or '-',
"details": log.details or '-',
"created_at": log.created_at.strftime('%d/%m %H:%M') if log.created_at else '',
"created_at_iso": log.created_at.isoformat() if log.created_at else '',
}
for log in logs
],
"timestamp": now,
"total": TwitchModerationLog.query.count(),
})
@webapp.route("/twitch-moderation/execute-action", methods=['POST'])
@require_page("twitch_moderation")
def execute_moderation_action():