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:
|
||||
mamiehenriette:
|
||||
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
|
||||
|
||||
# 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)
|
||||
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)
|
||||
|
||||
environment:
|
||||
TZ: Europe/Paris # Fuseau horaire
|
||||
TZ: Europe/Zurich # Fuseau horaire
|
||||
volumes:
|
||||
- ./instance:/app/instance # Base de données et configuration persistante
|
||||
- ./logs:/app/logs # Logs de l'application
|
||||
@@ -16,33 +16,12 @@ services:
|
||||
ports:
|
||||
- 5000:5000 # Interface web sur http://localhost:5000
|
||||
|
||||
watchtower: # Permet de mettre à jours automatiquement
|
||||
image: containrrr/watchtower:latest
|
||||
container_name: watchtower # Nom du conteneur
|
||||
restart: unless-stopped # Redémarre automatiquement sauf si arrêté manuellement
|
||||
environment:
|
||||
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)
|
||||
sqlite-web: # Interface web pour visualiser et éditer la base de données SQLite
|
||||
image: ghcr.io/coleifer/sqlite-web:latest # Image officielle sqlite-web
|
||||
container_name: sqlite_web2 # Nom du conteneur
|
||||
ports:
|
||||
- "5001:8080" # Accès web via localhost:8080
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock # Monte le socket Docker pour permettre à Watchtower de surveiller les conteneurs
|
||||
|
||||
# sqlite-web: # Interface web pour visualiser et éditer la base de données SQLite
|
||||
# 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
|
||||
- ./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")
|
||||
def moderation():
|
||||
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'])
|
||||
def update_moderation_event(event_id):
|
||||
|
||||
@@ -2,50 +2,69 @@
|
||||
|
||||
{% block content %}
|
||||
<h1>Modération Discord</h1>
|
||||
<p>Les commandes de modération sont :</p>
|
||||
<ul>
|
||||
<li>!kick @utilisateur [raison]</li>
|
||||
<li>!ban @utilisateur [raison]</li>
|
||||
<li>!warn @utilisateur [raison]</li>
|
||||
<li>!unwarn @utilisateur</li>
|
||||
</ul>
|
||||
<p>Historique des actions de modération sur le serveur Discord.</p>
|
||||
<table>
|
||||
|
||||
<p>
|
||||
Historique des actions de modération effectuées sur le serveur Discord.
|
||||
|
||||
Le bot enregistre automatiquement les avertissements, exclusions et bannissements.
|
||||
Exemples de commandes :
|
||||
<ul>
|
||||
<li><strong>!kick @utilisateur raison</strong> - !kick @Jean Spam de liens</li>
|
||||
<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>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Type</th>
|
||||
<th>Utilisateur</th>
|
||||
<th>Discord ID</th>
|
||||
<th>Date & Heure</th>
|
||||
<th>Raison</th>
|
||||
<th>Staff</th>
|
||||
<th>Actions</th>
|
||||
<th>#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for event in events %}
|
||||
{% for mod_event in events %}
|
||||
<tr>
|
||||
<td>{{ event.id }}</td>
|
||||
<td>{{ event.type }}</td>
|
||||
<td>{{ event.username }}</td>
|
||||
<td>{{ event.discord_id }}</td>
|
||||
<td>{{ event.created_at.strftime('%d/%m/%Y %H:%M') if event.created_at else 'N/A' }}</td>
|
||||
<td>{{ mod_event.type }}</td>
|
||||
<td>{{ mod_event.username }}</td>
|
||||
<td>{{ mod_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>{{ mod_event.reason }}</td>
|
||||
<td>{{ mod_event.staff_name }}</td>
|
||||
<td>
|
||||
<form action="{{ url_for('update_moderation_event', event_id = event.id) }}" method="POST" style="margin: 0;">
|
||||
<input name="reason" type="text" value="{{ event.reason }}" style="width: 100%;" />
|
||||
</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>
|
||||
<a href="{{ url_for('open_edit_moderation_event', event_id = mod_event.id) }}" class="icon">✐</a>
|
||||
<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>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</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 %}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user