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

85 lines
2.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 TwitchAnnouncement
@webapp.route("/announcements")
@require_page("announcements")
def openAnnouncements():
announcements = TwitchAnnouncement.query.all()
return render_template("announcements.html", announcements=announcements)
@webapp.route("/announcements/add", methods=['POST'])
@require_page("announcements")
def addAnnouncement():
if not can_write_page("announcements"):
return render_template("403.html"), 403
announcement = TwitchAnnouncement(
enable=True,
name=request.form.get('name'),
text=request.form.get('text'),
periodicity=int(request.form.get('periodicity', 10)),
min_chat_messages=int(request.form.get('min_chat_messages', 0))
)
db.session.add(announcement)
db.session.commit()
return redirect(url_for("openAnnouncements"))
@webapp.route("/announcements/toggle/<int:id>")
@require_page("announcements")
def toggleAnnouncement(id):
if not can_write_page("announcements"):
return render_template("403.html"), 403
announcement = TwitchAnnouncement.query.get_or_404(id)
announcement.enable = not announcement.enable
db.session.commit()
return redirect(url_for("openAnnouncements"))
@webapp.route("/announcements/edit/<int:id>")
@require_page("announcements")
def openEditAnnouncement(id):
announcement = TwitchAnnouncement.query.get_or_404(id)
return render_template("announcements.html", announcement=announcement)
@webapp.route("/announcements/edit/<int:id>", methods=['POST'])
@require_page("announcements")
def submitEditAnnouncement(id):
if not can_write_page("announcements"):
return render_template("403.html"), 403
announcement = TwitchAnnouncement.query.get_or_404(id)
announcement.name = request.form.get('name')
announcement.text = request.form.get('text')
announcement.periodicity = int(request.form.get('periodicity', 10))
announcement.min_chat_messages = int(request.form.get('min_chat_messages', 0))
db.session.commit()
return redirect(url_for("openAnnouncements"))
@webapp.route("/announcements/del/<int:id>")
@require_page("announcements")
def delAnnouncement(id):
if not can_write_page("announcements"):
return render_template("403.html"), 403
announcement = TwitchAnnouncement.query.get_or_404(id)
db.session.delete(announcement)
db.session.commit()
return redirect(url_for("openAnnouncements"))
@webapp.route("/announcements/reset/<int:id>")
@require_page("announcements")
def resetAnnouncement(id):
if not can_write_page("announcements"):
return render_template("403.html"), 403
announcement = TwitchAnnouncement.query.get_or_404(id)
announcement.last_sent = None
db.session.commit()
return redirect(url_for("openAnnouncements"))