mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 06:40:35 +01:00
Ajouter un modèle d'avertissement et des fonctionnalités de modération
Ajout d'un nouveau modèle Warning dans database/models.py pour suivre les avertissements donnés aux utilisateurs. Mise à jour de database/schema.sql pour créer la table correspondante 'warning'. Amélioration du bot Discord pour gérer les commandes d'avertissement. Ajout d'une route de modération dans webapp pour de futures fonctionnalités de modération. Mise à jour de template.html pour inclure un lien vers la page de modération.
This commit is contained in:
@@ -40,3 +40,12 @@ class Commande(db.Model):
|
|||||||
trigger = db.Column(db.String(32), unique=True)
|
trigger = db.Column(db.String(32), unique=True)
|
||||||
response = db.Column(db.String(2000))
|
response = db.Column(db.String(2000))
|
||||||
|
|
||||||
|
class Warning(db.Model):
|
||||||
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
username = db.Column(db.String(256))
|
||||||
|
discord_id = db.Column(db.String(64))
|
||||||
|
created_at = db.Column(db.DateTime)
|
||||||
|
reason = db.Column(db.String(1024))
|
||||||
|
staff_id = db.Column(db.String(64))
|
||||||
|
staff_name = db.Column(db.String(256))
|
||||||
|
|
||||||
|
|||||||
@@ -45,3 +45,13 @@ CREATE TABLE IF NOT EXISTS `commande` (
|
|||||||
`trigger` VARCHAR(16) UNIQUE NOT NULL,
|
`trigger` VARCHAR(16) UNIQUE NOT NULL,
|
||||||
`response` VARCHAR(2000) NOT NULL
|
`response` VARCHAR(2000) NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `warning` (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`username` VARCHAR(256) NOT NULL,
|
||||||
|
`discord_id` VARCHAR(64) NOT NULL,
|
||||||
|
`created_at` DATETIME NOT NULL,
|
||||||
|
`reason` VARCHAR(1024) NOT NULL,
|
||||||
|
`staff_id` VARCHAR(64) NOT NULL,
|
||||||
|
`staff_name` VARCHAR(256) NOT NULL
|
||||||
|
);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from database.helpers import ConfigurationHelper
|
|||||||
from database.models import Configuration, Humeur, Commande
|
from database.models import Configuration, Humeur, Commande
|
||||||
from discord import Message, TextChannel
|
from discord import Message, TextChannel
|
||||||
from discordbot.humblebundle import checkHumbleBundleAndNotify
|
from discordbot.humblebundle import checkHumbleBundleAndNotify
|
||||||
|
from discordbot.command import handle_warning_command
|
||||||
from protondb import searhProtonDb
|
from protondb import searhProtonDb
|
||||||
|
|
||||||
class DiscordBot(discord.Client):
|
class DiscordBot(discord.Client):
|
||||||
@@ -63,6 +64,12 @@ async def on_message(message: Message):
|
|||||||
if not message.content.startswith('!'):
|
if not message.content.startswith('!'):
|
||||||
return
|
return
|
||||||
command_name = message.content.split()[0]
|
command_name = message.content.split()[0]
|
||||||
|
|
||||||
|
if command_name in ['!averto', '!av', '!avertissement', '!warn']:
|
||||||
|
await handle_warning_command(message, bot)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
commande = Commande.query.filter_by(discord_enable=True, trigger=command_name).first()
|
commande = Commande.query.filter_by(discord_enable=True, trigger=command_name).first()
|
||||||
if commande:
|
if commande:
|
||||||
try:
|
try:
|
||||||
|
|||||||
44
discordbot/command.py
Normal file
44
discordbot/command.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import discord
|
||||||
|
from datetime import datetime
|
||||||
|
from database import db
|
||||||
|
from database.models import Warning
|
||||||
|
from discord import Message
|
||||||
|
|
||||||
|
STAFF_ROLE_ID = 581990740431732738
|
||||||
|
|
||||||
|
async def handle_warning_command(message: Message, bot):
|
||||||
|
if not any(role.id == STAFF_ROLE_ID for role in message.author.roles):
|
||||||
|
return
|
||||||
|
|
||||||
|
parts = message.content.split(maxsplit=2)
|
||||||
|
|
||||||
|
if len(parts) < 2 or not message.mentions:
|
||||||
|
return
|
||||||
|
|
||||||
|
target_user = message.mentions[0]
|
||||||
|
reason = parts[2] if len(parts) > 2 else "Sans raison"
|
||||||
|
|
||||||
|
warning = Warning(
|
||||||
|
username=target_user.name,
|
||||||
|
discord_id=str(target_user.id),
|
||||||
|
created_at=datetime.utcnow(),
|
||||||
|
reason=reason,
|
||||||
|
staff_id=str(message.author.id),
|
||||||
|
staff_name=message.author.name
|
||||||
|
)
|
||||||
|
db.session.add(warning)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
embed = discord.Embed(
|
||||||
|
title="⚠️ Avertissement",
|
||||||
|
description=f"{target_user.mention} a reçu un avertissement de la part de l'équipe de modération",
|
||||||
|
color=discord.Color.red(),
|
||||||
|
timestamp=datetime.utcnow()
|
||||||
|
)
|
||||||
|
embed.add_field(name="👤 Utilisateur", value=f"{target_user.name}\n`{target_user.id}`", inline=True)
|
||||||
|
#embed.add_field(name="🛡️ Modérateur", value=f"{message.author.name}\n`{message.author.id}`", inline=True)
|
||||||
|
embed.add_field(name="📝 Raison", value=reason, inline=False)
|
||||||
|
embed.set_footer(text="Mamie Henriette")
|
||||||
|
|
||||||
|
await message.channel.send(embed=embed)
|
||||||
|
await message.delete()
|
||||||
@@ -2,4 +2,4 @@ from flask import Flask
|
|||||||
|
|
||||||
webapp = Flask(__name__)
|
webapp = Flask(__name__)
|
||||||
|
|
||||||
from webapp import commandes, configurations, index, humeurs, protondb, live_alert, twitch_auth
|
from webapp import commandes, configurations, index, humeurs, protondb, live_alert, twitch_auth, moderation
|
||||||
|
|||||||
9
webapp/moderation.py
Normal file
9
webapp/moderation.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from flask import render_template
|
||||||
|
from webapp import webapp
|
||||||
|
from database.models import Warning
|
||||||
|
|
||||||
|
@webapp.route("/moderation")
|
||||||
|
def moderation():
|
||||||
|
warnings = Warning.query.order_by(Warning.created_at.desc()).all()
|
||||||
|
return render_template("moderation.html", warnings=warnings)
|
||||||
|
|
||||||
30
webapp/templates/moderation.html
Normal file
30
webapp/templates/moderation.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{% extends "template.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Modération Discord</h1>
|
||||||
|
<p>Liste des avertissements émis sur le serveur Discord.</p>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Utilisateur</th>
|
||||||
|
<th>Discord ID</th>
|
||||||
|
<th>Date & Heure</th>
|
||||||
|
<th>Raison</th>
|
||||||
|
<th>Staff</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for warning in warnings %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ warning.username }}</td>
|
||||||
|
<td>{{ warning.discord_id }}</td>
|
||||||
|
<td>{{ warning.created_at.strftime('%d/%m/%Y %H:%M') if warning.created_at else 'N/A' }}</td>
|
||||||
|
<td>{{ warning.reason }}</td>
|
||||||
|
<td>{{ warning.staff_name }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
<li><a href="/live-alert">Alerte live</a></li>
|
<li><a href="/live-alert">Alerte live</a></li>
|
||||||
<li><a href="/commandes">Commandes</a></li>
|
<li><a href="/commandes">Commandes</a></li>
|
||||||
<li><a href="/humeurs">Humeurs</a></li>
|
<li><a href="/humeurs">Humeurs</a></li>
|
||||||
|
<li><a href="/moderation">Modération</a></li>
|
||||||
<li><a href="/protondb">ProtonDB</a></li>
|
<li><a href="/protondb">ProtonDB</a></li>
|
||||||
<li><a href="/configurations">Configurations</a></li>
|
<li><a href="/configurations">Configurations</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user