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>
104 lines
3.8 KiB
Python
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'))
|