Discord · Guida

Come creare un bot di moderazione per Discord

Aggiornato October 11, 2026 7 min di lettura

In questa pagina
  1. Inizia con AutoMod di Discord
  2. Cosa aggiunge un bot di moderazione personalizzato
  3. Permessi, ordine dei ruoli e intent
  4. Comandi di moderazione in Python (discord.py)
  5. Un comando timeout in JavaScript (discord.js)
  6. Tenere traccia di ciò che succede
  7. Mantieni il bot online
  8. FAQ

Un server Discord molto attivo ha bisogno di una moderazione che non dorme mai: filtri antispam, timeout rapidi, un modo per eliminare un'ondata di messaggi e un registro di chi ha fatto cosa. Discord te ne offre una parte gratis con AutoMod, e un piccolo bot tutto tuo copre il resto.

Questa guida parte da AutoMod, perché potrebbe bastarti, poi crea i comandi di moderazione in Python (discord.py) o JavaScript (discord.js) e spiega i permessi, gli intent e i log che li fanno funzionare.

Inizia con AutoMod di Discord

AutoMod è integrato in Discord e gira dalla parte di Discord, quindi funziona anche quando nessun bot è online. Apri Server Settings → AutoMod; ti serve il permesso Manage Server. Offre:

  • Filtri di parole personalizzati con parole chiave, caratteri jolly ed espressioni regolari scelti da te.
  • Parole segnalate di frequente: elenchi pronti per volgarità, contenuti sessuali e insulti.
  • Spam di menzioni: interviene quando un messaggio menziona troppe persone insieme, fino al limite che imposti tu.
  • Contenuti spam: il rilevamento di Discord dei messaggi sospettati di spam.
  • Filtri sul profilo dei membri: parole chiave controllate nei nomi utente e nei profili.

Per ogni regola scegli cosa succede: bloccare il messaggio, inviare un avviso a un canale dei moderatori o mettere il membro in timeout. Puoi escludere ruoli e canali. I membri con Manage Server o Administrator non vengono mai filtrati.

Se il tuo problema sono spam, insulti e menzioni di massa, configura prima AutoMod e vedi se basta. Un bot personalizzato conviene quando vuoi comandi utilizzabili dai tuoi moderatori, regole tue e un log fatto come si deve.

Cosa aggiunge un bot di moderazione personalizzato

  • Comandi slash per i moderatori: /timeout, /purge, /slowmode, kick e ban, con un motivo registrato ogni volta.
  • Un canale di log di moderazione con ingressi, uscite, messaggi eliminati e ogni azione dei tuoi moderatori.
  • Regole tue: avvertimenti che si sommano fino a un timeout, account nuovi messi in attesa, link consentiti solo in alcuni canali.
  • Tutto in un unico posto, calibrato sulla tua community invece che sulle impostazioni predefinite di un bot pubblico.

Se non hai mai creato un bot, segui prima come creare un bot Discord per creare l'applicazione, ottenere il token ed eseguire un primo comando /ping. Il codice qui sotto parte da lì.

Permessi, ordine dei ruoli e intent

Invita il bot solo con i permessi che usano i suoi comandi:

AzionePermesso
Mettere in timeout un membro (fino a 28 giorni)Moderate Members
Espellere un membroKick Members
Bannare un membroBan Members
Eliminare messaggiManage Messages e Read Message History
Impostare la modalità lentaManage Channels

L'ordine dei ruoli conta. Un bot può agire solo sui membri il cui ruolo più alto è sotto il ruolo più alto del bot. In Server Settings → Roles, trascina il ruolo del bot sopra i ruoli che deve moderare. Nessuno può mettere in timeout il proprietario del server o un Administrator.

Intent. I comandi slash non richiedono intent privilegiati. Due sono utili per la moderazione: Server Members per il log di ingressi e uscite, e Message Content se il bot legge i messaggi per filtrarli da solo. Attivali in Bot → Privileged Gateway Intents nel Developer Portal. Da giugno 2026 Discord li sottopone a revisione solo per le app che superano i 10.000 utenti; sotto questa soglia basta l'interruttore.

Comandi di moderazione in Python (discord.py)

Con discord.py 2.7 installato (pip install discord.py), questo bot.py aggiunge /timeout, /purge e /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 nasconde ogni comando ai membri che non hanno quel permesso. Gli amministratori del server possono cambiare chi lo vede in Server Settings → Integrations. I limiti nel codice sono quelli di Discord: 40.320 minuti sono 28 giorni, la modalità lenta arriva fino a 6 ore.

Un comando timeout in JavaScript (discord.js)

Con discord.js 14 (npm install discord.js), lo stesso /timeout si scrive così. moderatable controlla l'ordine dei ruoli e il permesso del bot prima di provarci:

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 e ban seguono lo stesso schema con member.kick(reason) e member.ban({ reason, deleteMessageSeconds }). Un ban può anche eliminare fino a 7 giorni di messaggi del membro.

Tenere traccia di ciò che succede

  • Indica sempre un motivo. Le librerie lo inviano al registro di controllo di Discord (Server Settings → Audit Log), che conserva le voci per 45 giorni.
  • Pubblica ogni azione anche in un canale privato di log di moderazione: chi ha agito, su chi, perché e per quanto tempo. A differenza del registro di controllo, conserva lo storico per tutto il tempo che vuoi.
  • Ingressi e uscite richiedono l'intent Server Members; registra la data di creazione dell'account per individuare gli account usa e getta appena creati.
  • I messaggi eliminati e modificati si possono registrare con il loro testo solo se il bot ha l'intent Message Content.

Tieni presente il limite dell'eliminazione in blocco: Discord elimina fino a 100 messaggi per chiamata e rifiuta i messaggi più vecchi di due settimane, quindi /purge serve per lo spam recente, non per svuotare un vecchio canale.

Mantieni il bot online

AutoMod continua a lavorare senza di te, ma i tuoi comandi e i tuoi log si fermano nel momento in cui si ferma il processo del bot. Un bot di moderazione che gira sul PC di casa è offline proprio quando il PC va in sospensione, e i raid raramente aspettano l'orario d'ufficio.

Con l'hosting per bot Discord di HytHost carichi il progetto, scegli il runtime (Node.js, Python, Java, Go, C#, Bun o Lavalink) e tieni il token in una variabile di avvio invece che nel codice. Il pannello avvia il bot e lo riavvia dopo un crash. La configurazione completa è in come ospitare un bot Discord 24/7.

Un bot di moderazione funziona solo finché è acceso: l'hosting per bot Discord di HytHost supporta Python, Node.js e altri 5 runtime, da €0.89/mese.

Vedi i piani di hosting per bot
FAQ

Domande frequenti

Per molti server AutoMod basta: blocca parole chiave, parole segnalate, spam di menzioni e spam sospetto, e può mettere i membri in timeout. Aggiungi un bot quando i tuoi moderatori hanno bisogno di comandi come purge e modalità lenta, di regole tue o di un log completo delle azioni.

Solo di quelli che usano i suoi comandi: Moderate Members per i timeout, Kick Members, Ban Members, Manage Messages insieme a Read Message History per eliminare i messaggi e Manage Channels per la modalità lenta. Evita di dargli Administrator.

Di solito è colpa dell'ordine dei ruoli: il bot può agire solo sui membri il cui ruolo più alto è sotto il suo, quindi sposta più in alto il ruolo del bot in Server Settings. Il proprietario del server e i membri con Administrator non possono essere messi in timeout in nessun caso.

Non in blocco. L'eliminazione in blocco di Discord accetta fino a 100 messaggi alla volta e solo messaggi di meno di due settimane. Quelli più vecchi si possono eliminare solo uno alla volta, il che è lento.

Solo se legge i messaggi da sé, per esempio per filtrare parole o per registrare il testo dei messaggi eliminati. Comandi slash, timeout, ban e purge funzionano anche senza.

Ospita il tuo bot di moderazione

L'hosting per bot Discord di HytHost esegue Python, Node.js, Java, Go, C#, Bun o Lavalink, riavvia il bot dopo un crash e parte da €0.89/mese.

Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hours

Questa guida ti è stata utile?