Hogyan készíts Discord moderációs botot
Ezen az oldalon
Egy pörgős Discord szervernek olyan moderáció kell, ami sosem alszik: spamszűrők, gyors timeoutok, egy mód arra, hogy eltakarítsd az üzenetáradatot, és nyilvántartás arról, ki mit csinált. Ennek egy részét a Discord ingyen adja az AutoModdal, a többit egy kis saját bot oldja meg.
Ez az útmutató az AutoModdal kezd, mert lehet, hogy csak erre van szükséged, aztán moderációs parancsokat épít Pythonban (discord.py) vagy JavaScriptben (discord.js), és elmagyarázza, milyen jogosultságok, intentek és naplók kellenek a működésükhöz.
Kezdd a Discord AutoModdal
Az AutoMod a Discord beépített része, és a Discord oldalán fut, így akkor is működik, ha egyetlen bot sincs online. Nyisd meg a Server Settings → AutoMod menüt; ehhez Manage Server jogosultság kell. Ezt kínálja:
- Egyéni szószűrők saját kulcsszavakkal, helyettesítő karakterekkel és reguláris kifejezésekkel.
- Gyakran jelölt szavak: kész listák a káromkodásra, a szexuális tartalomra és a sértő kifejezésekre.
- Említésspam: lép, ha egy üzenet túl sok embert említ egyszerre, az általad megadott határig.
- Spamtartalom: a Discord saját felismerése a gyanús spamre.
- Tagprofil-szűrők: kulcsszavak, amelyeket a felhasználónevekben és a profilokban keres.
Minden szabálynál te döntöd el, mi történjen: az üzenet blokkolása, riasztás egy moderátori csatornába vagy timeout a tagnak. Rangokat és csatornákat kivételként is megadhatsz. A Manage Server vagy Administrator jogosultságú tagokat soha nem szűri.
Ha a gondod a spam, a sértő szavak és a tömeges említések, először állítsd be az AutoModot, és nézd meg, elég-e. Saját bot akkor éri meg, ha olyan parancsokat szeretnél, amelyeket a moderátoraid használhatnak, saját szabályokat és rendes naplót.
Mit ad hozzá egy saját moderációs bot
- Slash parancsok a moderátoroknak:
/timeout,/purge,/slowmode, kick és ban, minden alkalommal rögzített indoklással. - Egy mod log csatorna a belépésekkel, kilépésekkel, törölt üzenetekkel és a moderátoraid minden lépésével.
- Saját szabályok: figyelmeztetések, amelyek összeadódva timeoutot hoznak, visszatartott új fiókok, linkek csak bizonyos csatornákban.
- Minden egy helyen, a közösségedre szabva, nem egy nyilvános bot alapbeállításai szerint.
Ha még sosem készítettél botot, előbb kövesd a Discord bot készítéséről szóló útmutatót: hozd létre az alkalmazást, szerezd meg a tokent, és futtasd az első /ping parancsot. Az alábbi kód erre épít.
Jogosultságok, rangsorrend és intentek
Csak azokkal a jogosultságokkal hívd meg a botot, amelyeket a parancsai használnak:
| Művelet | Jogosultság |
|---|---|
| Tag timeoutolása (legfeljebb 28 napra) | Moderate Members |
| Tag kirúgása | Kick Members |
| Tag kitiltása | Ban Members |
| Üzenetek törlése | Manage Messages és Read Message History |
| Slow mode beállítása | Manage Channels |
A rangok sorrendje számít. A bot csak olyan tagokon tud műveletet végezni, akiknek a legmagasabb rangja a bot saját legmagasabb rangja alatt van. A Server Settings → Roles alatt húzd a bot rangját azok fölé, amelyeket moderálnia kell. A szerver tulajdonosát és az Administratorokat senki sem teheti timeoutba.
Intentek. A slash parancsokhoz nem kell privilegizált intent. Moderáláshoz kettő hasznos: a Server Members a belépések és kilépések naplózásához, a Message Content pedig akkor, ha a bot maga olvassa az üzeneteket, hogy szűrje őket. Kapcsold be őket a Developer Portalon, a Bot → Privileged Gateway Intents alatt. 2026 júniusa óta a Discord csak azoknál az alkalmazásoknál vizsgálja ezeket felül, amelyek 10 000-nél több felhasználót érnek el; ez alatt elég a kapcsoló.
Moderációs parancsok Pythonban (discord.py)
Telepített discord.py 2.7-tel (pip install discord.py) ez a bot.py hozzáadja a /timeout, /purge és /slowmode parancsokat:
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"])
A default_permissions minden parancsot elrejt azok elől, akiknek nincs meg a hozzá tartozó jogosultság. A szerver adminjai a Server Settings → Integrations alatt módosíthatják, ki látja. A kódban lévő határok a Discord korlátai: 40 320 perc 28 nap, a slow mode legfeljebb 6 óra lehet.
Timeout parancs JavaScriptben (discord.js)
discord.js 14-gyel (npm install discord.js) ugyanez a /timeout így néz ki. A moderatable a próbálkozás előtt ellenőrzi a rangsorrendet és a bot jogosultságát:
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);
A kick és a ban ugyanezt a mintát követi a member.kick(reason) és a member.ban({ reason, deleteMessageSeconds }) hívással. Kitiltáskor a tag legfeljebb 7 napnyi üzenete is törölhető.
Naplózd, mi történik
- Mindig adj meg indoklást. A könyvtárak elküldik a Discord audit logjába (Server Settings → Audit Log), amely 45 napig őrzi a bejegyzéseket.
- Minden műveletet küldj el egy privát mod log csatornába is: ki lépett, kivel szemben, miért és mennyi időre. Az audit loggal ellentétben ez addig őrzi az előzményeket, ameddig csak szeretnéd.
- A belépésekhez és kilépésekhez a Server Members intent kell; naplózd a fiók létrehozásának dátumát is, hogy kiszúrd a frissen gyártott eldobható fiókokat.
- A törölt és szerkesztett üzeneteket csak akkor lehet a szövegükkel együtt naplózni, ha a botnak megvan a Message Content intentje.
Tartsd észben a tömeges törlés korlátját: a Discord hívásonként legfeljebb 100 üzenetet töröl, és visszautasítja a két hétnél régebbieket, így a /purge friss spamhez való, nem egy régi csatorna kitakarításához.
Tartsd online a botot
Az AutoMod nélküled is dolgozik, de a parancsaid és a naplóid abban a pillanatban leállnak, amikor a bot folyamata leáll. Egy otthoni gépen futó moderációs bot pont akkor van offline, amikor a gép alvó módba megy, a raidek pedig ritkán várják meg a munkaidőt.
A HytHost Discord bot hostingon feltöltöd a projektet, kiválasztod a futtatókörnyezetet (Node.js, Python, Java, Go, C#, Bun vagy Lavalink), a tokent pedig a kód helyett egy indítási változóban tartod. A panel elindítja a botot, és összeomlás után újraindítja. A teljes beállítást a Hogyan üzemeltess Discord botot 24/7 útmutató írja le.
A moderációs bot csak addig dolgozik, amíg fut: a HytHost Discord bot hosting támogatja a Pythont, a Node.js-t és még 5 futtatókörnyezetet, €0.89/hó-tól.
Bot hosting csomagokGyakran ismételt kérdések
Sok szervernek elég az AutoMod: blokkolja a kulcsszavakat, a jelölt szavakat, az említésspamet és a gyanús spamet, és timeoutot is adhat a tagoknak. Akkor tegyél mellé botot, ha a moderátoraidnak olyan parancsok kellenek, mint a purge és a slow mode, saját szabályok vagy a műveletek teljes naplója.
Csak azok, amelyeket a parancsai használnak: Moderate Members a timeoutokhoz, Kick Members, Ban Members, Manage Messages a Read Message History-val az üzenetek törléséhez, és Manage Channels a slow mode-hoz. Administrator jogot lehetőleg ne adj neki.
Általában a rangsorrend miatt: a bot csak olyan tagokon tud műveletet végezni, akiknek a legmagasabb rangja a sajátja alatt van, ezért a Server Settingsben vidd feljebb a bot rangját. A szerver tulajdonosát és az Administrator jogú tagokat egyáltalán nem lehet timeoutba tenni.
Tömegesen nem. A Discord tömeges törlése egyszerre legfeljebb 100 üzenetet fogad el, és csak két hétnél frissebbeket. A régebbi üzeneteket csak egyenként lehet törölni, ami lassú.
Csak ha maga olvassa az üzeneteket, például szavak szűréséhez vagy a törölt üzenetek szövegének naplózásához. A slash parancsok, a timeoutok, a banok és a purge nélküle is működnek.
Hostold a moderációs botodat
A HytHost Discord bot hosting Pythont, Node.js-t, Javát, Go-t, C#-ot, Bunt vagy Lavalinket futtat, összeomlás után újraindítja a botot, és €0.89/hó-tól indul.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursHasznos volt ez az útmutató?