Kuidas teha Discordi modereerimisbotti
Sellel lehel
Elav Discordi server vajab modereerimist, mis kunagi ei maga: spämmifiltreid, kiireid ajutisi vaigistusi, viisi sõnumitulva koristamiseks ja ülevaadet sellest, kes mida tegi. Osa sellest annab Discord sulle AutoModiga tasuta, ülejäänu katab väike oma bot.
See juhend alustab AutoModist, sest sellest võib täiesti piisata. Seejärel ehitame modereerimiskäsud Pythonis (discord.py) või JavaScriptis (discord.js) ja selgitame õigusi, intente ja logisid, mis need tööle panevad.
Alusta Discordi AutoModist
AutoMod on Discordi sisse ehitatud ja töötab Discordi poolel, nii et see toimib ka siis, kui ükski bot pole võrgus. Ava Server Settings → AutoMod; selleks on vaja Manage Server õigust. See pakub:
- Kohandatud sõnafiltrid sinu enda märksõnade, metamärkide ja regulaaravaldistega.
- Sageli märgistatud sõnad: valmis loendid roppuste, seksuaalse sisu ja solvangute jaoks.
- Mainimisspämm: sekkumine, kui sõnum mainib korraga liiga palju inimesi, kuni sinu määratud piirini.
- Spämmisisu: Discordi enda kahtlase spämmi tuvastus.
- Liikmeprofiilide filtrid: märksõnad, mida kontrollitakse kasutajanimedest ja profiilidest.
Iga reegli puhul valid, mis juhtub: sõnum blokeeritakse, moderaatorite kanalisse saadetakse hoiatus või liige vaigistatakse ajutiselt (timeout). Rolle ja kanaleid saab reeglitest välja jätta. Manage Server või Administrator õigusega liikmeid ei filtreerita kunagi.
Kui sinu mure on spämm, solvangud ja massilised mainimised, seadista esmalt AutoMod ja vaata, kas sellest piisab. Oma bot tasub end ära, kui tahad käske, mida su moderaatorid saavad kasutada, oma reegleid ja korralikku logi.
Mida lisab oma modereerimisbot
- Slash-käsud moderaatoritele:
/timeout,/purge,/slowmode, kick ja ban, iga kord koos salvestatud põhjusega. - Modelogi kanal, kuhu jõuavad liitumised, lahkumised, kustutatud sõnumid ja iga sinu moderaatorite tehtud toiming.
- Sinu enda reeglid: hoiatused, mis kogunedes viivad ajutise vaigistuseni, uute kontode ootele jätmine ja lingid, mis on lubatud ainult mõnes kanalis.
- Kõik ühes kohas, häälestatud sinu kogukonnale, mitte avaliku boti vaikeseadetele.
Kui sa pole kunagi botti teinud, läbi esmalt juhend kuidas teha Discordi botti: loo rakendus, hangi token ja käivita esimene /ping käsk. Allolev kood põhineb sellel.
Õigused, rollide järjekord ja intentid
Kutsu bot serverisse ainult nende õigustega, mida tema käsud kasutavad:
| Toiming | Õigus |
|---|---|
| Liikme ajutine vaigistamine (kuni 28 päeva) | Moderate Members |
| Liikme väljaviskamine (kick) | Kick Members |
| Liikme blokeerimine (ban) | Ban Members |
| Sõnumite kustutamine | Manage Messages ja Read Message History |
| Aeglase režiimi (slow mode) seadmine | Manage Channels |
Rollide järjekord on oluline. Bot saab tegutseda ainult liikmetega, kelle kõrgeim roll on boti enda kõrgeimast rollist madalamal. Lohista jaotises Server Settings → Roles boti roll nende rollide kohale, mida see peab modereerima. Serveri omanikku ega Administrator õigusega liiget ei saa keegi ajutiselt vaigistada.
Intentid. Slash-käsud ei vaja ühtegi privilegeeritud intenti. Modereerimiseks on kasulikud kaks: Server Members liitumiste ja lahkumiste logimiseks ning Message Content, kui bot loeb sõnumeid ise, et neid filtreerida. Lülita need sisse Developer Portalis jaotises Bot → Privileged Gateway Intents. Alates 2026. aasta juunist vaatab Discord need üle ainult rakendustel, mis jõuavad üle 10 000 kasutajani; sellest allpool piisab lülitist.
Modereerimiskäsud Pythonis (discord.py)
Kui discord.py 2.7 on paigaldatud (pip install discord.py), lisab see bot.py käsud /timeout, /purge ja /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 peidab iga käsu liikmete eest, kellel vastavat õigust pole. Serveri administraatorid saavad muuta, kes käsku näeb, jaotises Server Settings → Integrations. Koodis olevad piirid on Discordi omad: 40 320 minutit on 28 päeva ja aeglane režiim ulatub kuni 6 tunnini.
Timeout-käsk JavaScriptis (discord.js)
Kui kasutad discord.js 14 (npm install discord.js), näeb sama /timeout välja nii. moderatable kontrollib enne katset rollide järjekorda ja boti õigust:
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 ja ban järgivad sama mustrit: member.kick(reason) ja member.ban({ reason, deleteMessageSeconds }). Ban võib ühtlasi kustutada kuni 7 päeva liikme sõnumeid.
Toimuva logimine
- Anna alati põhjus. Teegid saadavad selle Discordi auditilogisse (Server Settings → Audit Log), mis hoiab kirjeid 45 päeva.
- Postita iga toiming ka privaatsesse modelogi kanalisse: kes tegutses, kelle suhtes, miks ja kui kauaks. Erinevalt auditilogist säilib seal ajalugu nii kaua, kui soovid.
- Liitumised ja lahkumised vajavad Server Members intenti; logi ka konto loomise kuupäev, et märgata värskelt loodud ühekordseid kontosid.
- Kustutatud ja muudetud sõnumeid saab koos tekstiga logida ainult siis, kui botil on Message Content intent.
Pea meeles hulgikustutamise piirangut: Discord kustutab ühe päringuga kuni 100 sõnumit ja keeldub kahest nädalast vanematest sõnumitest, nii et /purge on värske spämmi jaoks, mitte vana kanali tühjendamiseks.
Hoia bot võrgus
AutoMod töötab ka ilma sinuta, kuid sinu käsud ja logid lakkavad töötamast samal hetkel, kui boti protsess peatub. Koduarvutis töötav modereerimisbot on võrgust väljas just siis, kui arvuti magab, ja reidid ootavad tööaega harva.
HytHost Discordi botimajutuses laadid projekti üles, valid käituskeskkonna (Node.js, Python, Java, Go, C#, Bun või Lavalink) ja hoiad tokenit koodi asemel käivitusmuutujas. Paneel käivitab boti ja taaskäivitab selle pärast krahhi. Kogu seadistus on juhendis kuidas majutada Discordi botti 24/7.
Modereerimisbot töötab ainult siis, kui see käib: HytHost Discordi botimajutus toetab Pythonit, Node.js-i ja veel 5 käituskeskkonda, alates €0.89/kuu.
Vaata botimajutuse paketteKorduma kippuvad küsimused
Paljudele serveritele piisab AutoModist: see blokeerib märksõnu, märgistatud sõnu, mainimisspämmi ja kahtlast spämmi ning oskab liikmeid ajutiselt vaigistada. Lisa bot, kui su moderaatorid vajavad käske nagu purge ja slow mode, oma reegleid või täielikku toimingute logi.
Ainult neid, mida tema käsud kasutavad: Moderate Members ajutiseks vaigistamiseks, Kick Members, Ban Members, Manage Messages koos Read Message History õigusega sõnumite kustutamiseks ning Manage Channels aeglase režiimi jaoks. Ära anna talle Administrator õigust.
Tavaliselt rollide järjekorra pärast: bot saab tegutseda ainult liikmetega, kelle kõrgeim roll on tema omast madalamal, nii et tõsta boti roll Server Settings all kõrgemale. Serveri omanikku ja Administrator õigusega liikmeid ei saa üldse ajutiselt vaigistada.
Hulgi mitte. Discordi hulgikustutus võtab korraga kuni 100 sõnumit ja ainult alla kahe nädala vanuseid. Vanemaid sõnumeid saab kustutada ainult ükshaaval, mis on aeglane.
Ainult siis, kui ta loeb sõnumeid ise, näiteks sõnade filtreerimiseks või kustutatud sõnumite teksti logimiseks. Slash-käsud, ajutised vaigistused, banid ja purge töötavad ka ilma selleta.
Majuta oma modereerimisbot
HytHost Discordi botimajutus käitab Pythonit, Node.js-i, Javat, Go-d, C#-i, Buni või Lavalinki, taaskäivitab boti pärast krahhi ja algab hinnast €0.89/kuu.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursKas see juhend oli abiks?