Files
Mow910andCursor b274dcaa51 Ajout de fonctionnalités majeures Twitch, Discord et interface web
Nouvelles fonctionnalités :
- Système de modération Twitch complet (bans, timeouts, avertissements)
- Filtre de liens intelligent pour Twitch avec whitelist/blacklist
- Notifications d'événements Twitch (follows, subs, raids, etc.)
- Système Freeloot Discord avec flux RSS dédié
- Salons automatiques Discord (création/suppression dynamique)
- Authentification utilisateur pour l'interface web (login/register)
- Gestion des utilisateurs et permissions
- Interface de modération Twitch dans la webapp
- Interface de gestion des événements Twitch
- Configuration des paramètres utilisateur
- Migration BDD pour les mots bannis

Améliorations de l'interface :
- Refonte complète des templates (configurations, commandes, humeurs, etc.)
- Nouvelle page de settings utilisateur
- Page de gestion des utilisateurs (admin)
- Page d'erreur 403 personnalisée
- Amélioration de la navigation et du design global
- Intégration de nouvelles sections dans le menu principal

Modifications techniques :
- Ajout de nouveaux modèles en base de données
- Extension des helpers database
- Mise à jour des dépendances (requirements.txt)
- Amélioration de la gestion des annonces Twitch
- Refactorisation du code pour meilleure maintenabilité

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 22:37:22 +01:00

104 lines
3.8 KiB
Python

from flask import render_template, request, redirect, url_for
from webapp import webapp
from webapp.auth import require_page, can_write_page
from database import db
from database.models import TwitchLinkFilter, TwitchAllowedDomain, TwitchAllowedUser
def _get_or_create_config():
config = TwitchLinkFilter.query.first()
if not config:
config = TwitchLinkFilter(enabled=False)
db.session.add(config)
db.session.commit()
return config
@webapp.route("/link-filter")
@require_page("link_filter")
def link_filter():
config = _get_or_create_config()
domains = TwitchAllowedDomain.query.order_by(TwitchAllowedDomain.domain).all()
users = TwitchAllowedUser.query.order_by(TwitchAllowedUser.username).all()
return render_template("link-filter.html", config=config, domains=domains, users=users)
@webapp.route("/link-filter/toggle")
@require_page("link_filter")
def toggle_link_filter():
if not can_write_page("link_filter"):
return render_template("403.html"), 403
config = _get_or_create_config()
config.enabled = not config.enabled
db.session.commit()
return redirect(url_for('link_filter'))
@webapp.route("/link-filter/update", methods=['POST'])
@require_page("link_filter")
def update_link_filter():
if not can_write_page("link_filter"):
return render_template("403.html"), 403
config = _get_or_create_config()
config.allow_subscribers = request.form.get('allow_subscribers') is not None
config.allow_vips = request.form.get('allow_vips') is not None
config.allow_moderators = request.form.get('allow_moderators') is not None
config.timeout_duration = int(request.form.get('timeout_duration', 60))
config.warning_message = request.form.get('warning_message', '')
db.session.commit()
return redirect(url_for('link_filter'))
@webapp.route("/link-filter/domain/add", methods=['POST'])
@require_page("link_filter")
def add_allowed_domain():
if not can_write_page("link_filter"):
return render_template("403.html"), 403
domain = request.form.get('domain', '').strip().lower()
if domain:
domain = domain.replace('https://', '').replace('http://', '').replace('www.', '')
domain = domain.split('/')[0]
existing = TwitchAllowedDomain.query.filter_by(domain=domain).first()
if not existing:
new_domain = TwitchAllowedDomain(domain=domain)
db.session.add(new_domain)
db.session.commit()
return redirect(url_for('link_filter'))
@webapp.route("/link-filter/domain/delete/<int:domain_id>")
@require_page("link_filter")
def delete_allowed_domain(domain_id):
if not can_write_page("link_filter"):
return render_template("403.html"), 403
domain = TwitchAllowedDomain.query.get_or_404(domain_id)
db.session.delete(domain)
db.session.commit()
return redirect(url_for('link_filter'))
@webapp.route("/link-filter/user/add", methods=['POST'])
@require_page("link_filter")
def add_allowed_user():
if not can_write_page("link_filter"):
return render_template("403.html"), 403
username = request.form.get('username', '').strip().lower().lstrip('@')
if username:
existing = TwitchAllowedUser.query.filter_by(username=username).first()
if not existing:
new_user = TwitchAllowedUser(username=username)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('link_filter'))
@webapp.route("/link-filter/user/delete/<int:user_id>")
@require_page("link_filter")
def delete_allowed_user(user_id):
if not can_write_page("link_filter"):
return render_template("403.html"), 403
user = TwitchAllowedUser.query.get_or_404(user_id)
db.session.delete(user)
db.session.commit()
return redirect(url_for('link_filter'))