Comment créer un bot de modération Discord
Sur cette page
Un serveur Discord animé a besoin d'une modération qui ne dort jamais : des filtres anti-spam, des timeouts rapides, un moyen d'effacer d'un coup une avalanche de messages et une trace de qui a fait quoi. Discord vous en offre une partie gratuitement avec AutoMod, et un petit bot à vous s'occupe du reste.
Ce guide commence par AutoMod, car il peut suffire, puis construit des commandes de modération en Python (discord.py) ou en JavaScript (discord.js) et explique les permissions, les intents et les logs qui les font fonctionner.
Commencez par AutoMod de Discord
AutoMod est intégré à Discord et tourne côté Discord : il fonctionne donc même quand aucun bot n'est en ligne. Ouvrez Server Settings → AutoMod ; il vous faut la permission Manage Server. Voici ce qu'il propose :
- Des filtres de mots personnalisés avec vos propres mots-clés, jokers et expressions régulières.
- Les mots souvent signalés : des listes toutes prêtes pour les grossièretés, le contenu sexuel et les insultes.
- Le spam de mentions : une action se déclenche quand un message mentionne trop de personnes à la fois, au-delà d'une limite que vous fixez.
- Le contenu indésirable : la détection propre à Discord des messages suspectés d'être du spam.
- Les filtres de profil des membres : des mots-clés vérifiés dans les noms d'utilisateur et les profils.
Pour chaque règle, vous choisissez la réaction : bloquer le message, envoyer une alerte dans un salon de modérateurs ou mettre le membre en timeout. Vous pouvez exempter des rôles et des salons. Les membres qui ont Manage Server ou Administrator ne sont jamais filtrés.
Si votre problème, c'est le spam, les insultes et les mentions en masse, configurez d'abord AutoMod et voyez si cela suffit. Un bot maison devient rentable quand vous voulez des commandes pour vos modérateurs, vos propres règles et un vrai journal.
Ce qu'apporte un bot de modération maison
- Des commandes slash pour les modérateurs :
/timeout,/purge,/slowmode, kick et ban, avec un motif enregistré à chaque fois. - Un salon de mod log avec les arrivées, les départs, les messages supprimés et chaque action de vos modérateurs.
- Vos propres règles : des avertissements qui s'additionnent jusqu'au timeout, des comptes récents mis en attente, des liens autorisés seulement dans certains salons.
- Tout au même endroit, réglé pour votre communauté plutôt que selon les paramètres par défaut d'un bot public.
Si vous n'avez jamais créé de bot, suivez d'abord comment créer un bot Discord pour créer l'application, récupérer le token et lancer une première commande /ping. Le code ci-dessous part de là.
Permissions, ordre des rôles et intents
Invitez le bot uniquement avec les permissions que ses commandes utilisent :
| Action | Permission |
|---|---|
| Mettre un membre en timeout (jusqu'à 28 jours) | Moderate Members |
| Expulser un membre | Kick Members |
| Bannir un membre | Ban Members |
| Supprimer des messages | Manage Messages et Read Message History |
| Activer le mode lent | Manage Channels |
L'ordre des rôles compte. Un bot ne peut agir que sur les membres dont le rôle le plus élevé est en dessous du rôle le plus élevé du bot. Dans Server Settings → Roles, faites glisser le rôle du bot au-dessus des rôles qu'il doit modérer. Personne ne peut mettre en timeout le propriétaire du serveur ou un Administrator.
Intents. Les commandes slash n'ont besoin d'aucun intent privilégié. Deux sont utiles pour la modération : Server Members pour journaliser les arrivées et les départs, et Message Content si le bot lit lui-même les messages pour les filtrer. Activez-les sous Bot → Privileged Gateway Intents dans le Developer Portal. Depuis juin 2026, Discord ne les examine que pour les applications qui touchent plus de 10 000 utilisateurs ; en dessous, l'interrupteur suffit.
Commandes de modération en Python (discord.py)
Avec discord.py 2.7 installé (pip install discord.py), ce bot.py ajoute /timeout, /purge et /slowmode :
import os
from datetime import timedelta
from typing import Optional
import discord
from discord import app_commands
class Bot(discord.Client):
def __init__(self):
super().__init__(intents=discord.Intents.default())
self.tree = app_commands.CommandTree(self)
async def setup_hook(self):
await self.tree.sync()
bot = Bot()
@bot.tree.command(description="Time out a member")
@app_commands.guild_only()
@app_commands.default_permissions(moderate_members=True)
async def timeout(interaction: discord.Interaction, member: discord.Member,
minutes: app_commands.Range[int, 1, 40320], reason: Optional[str] = None):
await member.timeout(timedelta(minutes=minutes), reason=reason)
await interaction.response.send_message(f"{member.mention} is timed out for {minutes} min.", ephemeral=True)
@bot.tree.command(description="Delete recent messages in this channel")
@app_commands.guild_only()
@app_commands.default_permissions(manage_messages=True)
async def purge(interaction: discord.Interaction, count: app_commands.Range[int, 1, 100]):
await interaction.response.defer(ephemeral=True)
deleted = await interaction.channel.purge(limit=count)
await interaction.followup.send(f"Deleted {len(deleted)} messages.", ephemeral=True)
@bot.tree.command(description="Set slow mode in this channel")
@app_commands.guild_only()
@app_commands.default_permissions(manage_channels=True)
async def slowmode(interaction: discord.Interaction, seconds: app_commands.Range[int, 0, 21600]):
await interaction.channel.edit(slowmode_delay=seconds)
await interaction.response.send_message(f"Slow mode is now {seconds} s.", ephemeral=True)
bot.run(os.environ["DISCORD_TOKEN"])
default_permissions masque chaque commande aux membres qui n'ont pas la permission correspondante. Les administrateurs du serveur peuvent changer qui la voit dans Server Settings → Integrations. Les limites du code sont celles de Discord : 40 320 minutes font 28 jours, et le mode lent va jusqu'à 6 heures.
Une commande de timeout en JavaScript (discord.js)
Avec discord.js 14 (npm install discord.js), la même commande /timeout ressemble à ceci. moderatable vérifie l'ordre des rôles et la permission du bot avant d'essayer :
const { Client, Events, GatewayIntentBits, InteractionContextType, MessageFlags,
PermissionFlagsBits, REST, Routes, SlashCommandBuilder } = require('discord.js');
const commands = [
new SlashCommandBuilder()
.setName('timeout').setDescription('Time out a member')
.addUserOption((o) => o.setName('member').setDescription('Member').setRequired(true))
.addIntegerOption((o) => o.setName('minutes').setDescription('Minutes').setMinValue(1).setMaxValue(40320).setRequired(true))
.addStringOption((o) => o.setName('reason').setDescription('Reason'))
.setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers)
.setContexts(InteractionContextType.Guild)
.toJSON(),
];
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, async (c) => {
await new REST().setToken(process.env.DISCORD_TOKEN).put(Routes.applicationCommands(c.user.id), { body: commands });
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand() || interaction.commandName !== 'timeout') return;
const member = interaction.options.getMember('member');
const minutes = interaction.options.getInteger('minutes');
if (!member?.moderatable) {
return interaction.reply({ content: 'I cannot time out that member.', flags: MessageFlags.Ephemeral });
}
await member.timeout(minutes * 60_000, interaction.options.getString('reason') ?? undefined);
await interaction.reply({ content: `${member} is timed out for ${minutes} min.`, flags: MessageFlags.Ephemeral });
});
client.login(process.env.DISCORD_TOKEN);
Kick et ban suivent le même schéma avec member.kick(reason) et member.ban({ reason, deleteMessageSeconds }). Un ban peut aussi supprimer jusqu'à 7 jours de messages du membre.
Garder une trace de ce qui se passe
- Indiquez toujours un motif. Les bibliothèques l'envoient dans le journal d'audit de Discord (Server Settings → Audit Log), qui conserve les entrées 45 jours.
- Publiez aussi chaque action dans un salon de mod log privé : qui a agi, sur qui, pourquoi et pour combien de temps. Contrairement au journal d'audit, il garde l'historique aussi longtemps que vous le souhaitez.
- Les arrivées et les départs nécessitent l'intent Server Members ; notez la date de création du compte pour repérer les comptes jetables tout juste créés.
- Les messages supprimés et modifiés ne peuvent être journalisés avec leur texte que si le bot a l'intent Message Content.
Gardez en tête la limite de suppression en masse : Discord supprime au plus 100 messages par appel et refuse les messages de plus de deux semaines. /purge sert donc au spam récent, pas à vider un vieux salon.
Gardez le bot en ligne
AutoMod continue de fonctionner sans vous, mais vos commandes et vos logs s'arrêtent dès que le processus du bot s'arrête. Un bot de modération qui tourne sur le PC de la maison est hors ligne justement quand le PC se met en veille, et les raids attendent rarement les heures de bureau.
Avec l'hébergement de bots Discord HytHost, vous envoyez le projet, choisissez le runtime (Node.js, Python, Java, Go, C#, Bun ou Lavalink) et gardez le token dans une variable de démarrage plutôt que dans le code. Le panel démarre le bot et le relance après un crash. La configuration complète se trouve dans comment héberger un bot Discord 24/7.
Un bot de modération ne sert que tant qu'il tourne : l'hébergement de bots Discord HytHost prend en charge Python, Node.js et 5 autres runtimes, dès €0.89/mois.
Voir les offres d'hébergement de botsQuestions fréquentes
Pour beaucoup de serveurs, AutoMod suffit : il bloque les mots-clés, les mots signalés, le spam de mentions et le spam suspecté, et peut mettre des membres en timeout. Ajoutez un bot quand vos modérateurs ont besoin de commandes comme purge et le mode lent, de vos propres règles ou d'un journal complet des actions.
Seulement de celles que ses commandes utilisent : Moderate Members pour les timeouts, Kick Members, Ban Members, Manage Messages avec Read Message History pour supprimer des messages, et Manage Channels pour le mode lent. Évitez de lui donner Administrator.
En général, c'est l'ordre des rôles : le bot ne peut agir que sur les membres dont le rôle le plus élevé est en dessous du sien, donc remontez le rôle du bot dans les Server Settings. Le propriétaire du serveur et les membres qui ont Administrator ne peuvent pas du tout être mis en timeout.
Pas en masse. La suppression en masse de Discord accepte jusqu'à 100 messages à la fois, et seulement des messages de moins de deux semaines. Les messages plus anciens ne peuvent être supprimés qu'un par un, ce qui est lent.
Seulement s'il lit lui-même les messages, par exemple pour filtrer des mots ou journaliser le texte des messages supprimés. Les commandes slash, les timeouts, les bans et les purges fonctionnent sans lui.
Hébergez votre bot de modération
L'hébergement de bots Discord HytHost fait tourner Python, Node.js, Java, Go, C#, Bun ou Lavalink, relance le bot après un crash et démarre à €0.89/mois.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursCe guide vous a-t-il été utile ?