mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 06:40:35 +01:00
Améliore la communication moderation
This commit is contained in:
@@ -1,14 +1,14 @@
|
|||||||
services:
|
services:
|
||||||
mamiehenriette:
|
mamiehenriette:
|
||||||
container_name: MamieHenriette # Nom du conteneur
|
container_name: MamieHenriette # Nom du conteneur
|
||||||
image: ghcr.io/skylanix/mamiehenriette:latest # Image hébergée sur GitHub Container Registry
|
# image: ghcr.io/skylanix/mamiehenriette:latest # Image hébergée sur GitHub Container Registry
|
||||||
restart: unless-stopped # Redémarre automatiquement sauf si arrêté manuellement
|
restart: unless-stopped # Redémarre automatiquement sauf si arrêté manuellement
|
||||||
|
|
||||||
# build: . # Build du conteneur à partir d'un Dockerfile local (décommentez si nécessaire)
|
build: . # Build du conteneur à partir d'un Dockerfile local (décommentez si nécessaire)
|
||||||
# image: mamiehenriette # Build du conteneur à partir d'un Dockerfile local (décommentez si nécessaire)
|
image: mamiehenriette # Build du conteneur à partir d'un Dockerfile local (décommentez si nécessaire)
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
TZ: Europe/Paris # Fuseau horaire
|
TZ: Europe/Zurich # Fuseau horaire
|
||||||
volumes:
|
volumes:
|
||||||
- ./instance:/app/instance # Base de données et configuration persistante
|
- ./instance:/app/instance # Base de données et configuration persistante
|
||||||
- ./logs:/app/logs # Logs de l'application
|
- ./logs:/app/logs # Logs de l'application
|
||||||
@@ -16,33 +16,12 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 5000:5000 # Interface web sur http://localhost:5000
|
- 5000:5000 # Interface web sur http://localhost:5000
|
||||||
|
|
||||||
watchtower: # Permet de mettre à jours automatiquement
|
sqlite-web: # Interface web pour visualiser et éditer la base de données SQLite
|
||||||
image: containrrr/watchtower:latest
|
image: ghcr.io/coleifer/sqlite-web:latest # Image officielle sqlite-web
|
||||||
container_name: watchtower # Nom du conteneur
|
container_name: sqlite_web2 # Nom du conteneur
|
||||||
restart: unless-stopped # Redémarre automatiquement sauf si arrêté manuellement
|
ports:
|
||||||
environment:
|
- "5001:8080" # Accès web via localhost:8080
|
||||||
TZ: Europe/Paris # Fuseau horaire
|
|
||||||
# Liste des conteneurs à surveiller (séparés par des espaces)
|
|
||||||
WATCHTOWER_INCLUDE: "MamieHenriette"
|
|
||||||
WATCHTOWER_SCHEDULE: "0 */30 * * * *" # Vérification toutes les 30 minutes
|
|
||||||
WATCHTOWER_MONITOR_ONLY: "false" # Mode surveillance uniquement : détecte les mises à jour mais ne les applique pas
|
|
||||||
WATCHTOWER_CLEANUP: "true" # Supprime automatiquement les anciennes images après mise à jour
|
|
||||||
WATCHTOWER_INCLUDE_RESTARTING: "true" # Inclut les conteneurs en cours de redémarrage dans la surveillance
|
|
||||||
# URL de notification Discord (webhook), (décommentez si nécessaire)
|
|
||||||
# WATCHTOWER_NOTIFICATION_URL: "discord://token@id"
|
|
||||||
# Format personnalisé des messages de notification (décommentez si nécessaire)
|
|
||||||
# WATCHTOWER_NOTIFICATION_TEMPLATE: |-
|
|
||||||
# {{range .}}{{.Time.Format "01-02-2006 15:04:05"}} ({{.Level}})':' {{.Message}}{{println}}{{end}}
|
|
||||||
# WATCHTOWER_NOTIFICATIONS: shoutrrr # Service de notification utilisé pour Discord (décommentez si nécessaire)
|
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock # Monte le socket Docker pour permettre à Watchtower de surveiller les conteneurs
|
- ./instance/database.db:/data/database.db # Monte la base de données locale dans le conteneur
|
||||||
|
environment:
|
||||||
# sqlite-web: # Interface web pour visualiser et éditer la base de données SQLite
|
- SQLITE_DATABASE=/data/database.db # Chemin vers la base de données dans le conteneur
|
||||||
# image: ghcr.io/coleifer/sqlite-web:latest # Image officielle sqlite-web
|
|
||||||
# container_name: sqlite_web # Nom du conteneur
|
|
||||||
# ports:
|
|
||||||
# - "5001:8080" # Accès web via localhost:8080
|
|
||||||
# volumes:
|
|
||||||
# - ./instance/database.db:/data/database.db # Monte la base de données locale dans le conteneur
|
|
||||||
# environment:
|
|
||||||
# - SQLITE_DATABASE=/data/database.db # Chemin vers la base de données dans le conteneur
|
|
||||||
|
|||||||
@@ -6,7 +6,13 @@ from database.models import ModerationEvent
|
|||||||
@webapp.route("/moderation")
|
@webapp.route("/moderation")
|
||||||
def moderation():
|
def moderation():
|
||||||
events = ModerationEvent.query.order_by(ModerationEvent.created_at.desc()).all()
|
events = ModerationEvent.query.order_by(ModerationEvent.created_at.desc()).all()
|
||||||
return render_template("moderation.html", events=events)
|
return render_template("moderation.html", events=events, event=None)
|
||||||
|
|
||||||
|
@webapp.route("/moderation/edit/<int:event_id>")
|
||||||
|
def open_edit_moderation_event(event_id):
|
||||||
|
event = ModerationEvent.query.get_or_404(event_id)
|
||||||
|
events = ModerationEvent.query.order_by(ModerationEvent.created_at.desc()).all()
|
||||||
|
return render_template("moderation.html", events=events, event=event)
|
||||||
|
|
||||||
@webapp.route("/moderation/update/<int:event_id>", methods=['POST'])
|
@webapp.route("/moderation/update/<int:event_id>", methods=['POST'])
|
||||||
def update_moderation_event(event_id):
|
def update_moderation_event(event_id):
|
||||||
|
|||||||
@@ -2,50 +2,69 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>Modération Discord</h1>
|
<h1>Modération Discord</h1>
|
||||||
<p>Les commandes de modération sont :</p>
|
|
||||||
<ul>
|
<p>
|
||||||
<li>!kick @utilisateur [raison]</li>
|
Historique des actions de modération effectuées sur le serveur Discord.
|
||||||
<li>!ban @utilisateur [raison]</li>
|
|
||||||
<li>!warn @utilisateur [raison]</li>
|
Le bot enregistre automatiquement les avertissements, exclusions et bannissements.
|
||||||
<li>!unwarn @utilisateur</li>
|
Exemples de commandes :
|
||||||
</ul>
|
<ul>
|
||||||
<p>Historique des actions de modération sur le serveur Discord.</p>
|
<li><strong>!kick @utilisateur raison</strong> - !kick @Jean Spam de liens</li>
|
||||||
<table>
|
<li><strong>!ban @utilisateur raison</strong> - !ban @Marie Comportement toxique répété</li>
|
||||||
|
<li><strong>!warn @utilisateur raison</strong> - !warn @Paul Langage inapproprié</li>
|
||||||
|
<li><strong>!unwarn @utilisateur</strong> - !unwarn @Paul</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% if not event %}
|
||||||
|
<h2>Événements de modération</h2>
|
||||||
|
<table class="moderation">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>ID</th>
|
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>Utilisateur</th>
|
<th>Utilisateur</th>
|
||||||
<th>Discord ID</th>
|
<th>Discord ID</th>
|
||||||
<th>Date & Heure</th>
|
<th>Date & Heure</th>
|
||||||
<th>Raison</th>
|
<th>Raison</th>
|
||||||
<th>Staff</th>
|
<th>Staff</th>
|
||||||
<th>Actions</th>
|
<th>#</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for event in events %}
|
{% for mod_event in events %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ event.id }}</td>
|
<td>{{ mod_event.type }}</td>
|
||||||
<td>{{ event.type }}</td>
|
<td>{{ mod_event.username }}</td>
|
||||||
<td>{{ event.username }}</td>
|
<td>{{ mod_event.discord_id }}</td>
|
||||||
<td>{{ event.discord_id }}</td>
|
<td>{{ mod_event.created_at.strftime('%d/%m/%Y %H:%M') if mod_event.created_at else 'N/A' }}</td>
|
||||||
<td>{{ event.created_at.strftime('%d/%m/%Y %H:%M') if event.created_at else 'N/A' }}</td>
|
<td>{{ mod_event.reason }}</td>
|
||||||
|
<td>{{ mod_event.staff_name }}</td>
|
||||||
<td>
|
<td>
|
||||||
<form action="{{ url_for('update_moderation_event', event_id = event.id) }}" method="POST" style="margin: 0;">
|
<a href="{{ url_for('open_edit_moderation_event', event_id = mod_event.id) }}" class="icon">✐</a>
|
||||||
<input name="reason" type="text" value="{{ event.reason }}" style="width: 100%;" />
|
<a href="{{ url_for('delete_moderation_event', event_id = mod_event.id) }}" onclick="return confirm('Êtes-vous sûr de vouloir supprimer cet événement ?')" class="icon">🗑</a>
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
<td>{{ event.staff_name }}</td>
|
|
||||||
<td>
|
|
||||||
<a href="javascript:void(0)" onclick="this.parentElement.parentElement.querySelector('form').submit()">Modifier</a>
|
|
||||||
|
|
|
||||||
<a href="{{ url_for('delete_moderation_event', event_id = event.id) }}" onclick="return confirm('Êtes-vous sûr de vouloir supprimer cet événement ?')">🗑️ Supprimer</a>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if event %}
|
||||||
|
<h2>Editer un événement</h2>
|
||||||
|
<form action="{{ url_for('update_moderation_event', event_id = event.id) }}" method="POST">
|
||||||
|
<label for="type">Type</label>
|
||||||
|
<input name="type" type="text" value="{{ event.type }}" disabled />
|
||||||
|
<label for="username">Utilisateur</label>
|
||||||
|
<input name="username" type="text" value="{{ event.username }}" disabled />
|
||||||
|
<label for="discord_id">Discord ID</label>
|
||||||
|
<input name="discord_id" type="text" value="{{ event.discord_id }}" disabled />
|
||||||
|
<label for="reason">Raison</label>
|
||||||
|
<input name="reason" type="text" value="{{ event.reason }}" required="required" />
|
||||||
|
<label for="staff_name">Staff</label>
|
||||||
|
<input name="staff_name" type="text" value="{{ event.staff_name }}" disabled />
|
||||||
|
<input type="Submit" value="Modifier">
|
||||||
|
<a href="{{ url_for('moderation') }}">Annuler</a>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user