Discord · Návod

Jak vytvořit moderátorského bota pro Discord

Aktualizováno October 11, 2026 6 min čtení

Na této stránce
  1. Začněte s Discord AutoMod
  2. Co přidá vlastní moderátorský bot
  3. Oprávnění, pořadí rolí a intenty
  4. Moderační příkazy v Pythonu (discord.py)
  5. Příkaz timeout v JavaScriptu (discord.js)
  6. Logování toho, co se děje
  7. Udržte bota online
  8. FAQ

Rušný Discord server potřebuje moderaci, která nikdy nespí: filtry spamu, rychlé timeouty, způsob, jak smazat záplavu zpráv, a záznam o tom, kdo co udělal. Část z toho vám Discord dává zdarma v podobě AutoMod, zbytek pokryje malý vlastní bot.

Tento návod začíná u AutoMod, protože vám možná bude stačit. Pak vytvoří moderační příkazy v Pythonu (discord.py) nebo JavaScriptu (discord.js) a vysvětlí oprávnění, intenty a logy, díky kterým fungují.

Začněte s Discord AutoMod

AutoMod je přímo součástí Discordu a běží na straně Discordu, takže funguje, i když žádný bot není online. Otevřete Server Settings → AutoMod; potřebujete k tomu oprávnění Manage Server. Nabízí:

  • Vlastní filtry slov s vašimi klíčovými slovy, zástupnými znaky a regulárními výrazy.
  • Často nahlašovaná slova: hotové seznamy pro vulgarity, sexuální obsah a urážky.
  • Spam zmínek: zásah, když zpráva zmíní příliš mnoho lidí najednou, až do limitu, který si nastavíte.
  • Spamový obsah: vlastní detekce podezřelého spamu od Discordu.
  • Filtry profilů členů: klíčová slova kontrolovaná v uživatelských jménech a profilech.

U každého pravidla zvolíte, co se stane: zablokovat zprávu, poslat upozornění do kanálu moderátorů, nebo dát členovi timeout. Role a kanály můžete z pravidel vyjmout. Členové s oprávněním Manage Server nebo Administrator se nefiltrují nikdy.

Pokud řešíte spam, urážky a hromadné zmínky, nastavte nejdřív AutoMod a zjistěte, jestli to stačí. Vlastní bot se vyplatí, když chcete příkazy pro své moderátory, vlastní pravidla a pořádný log.

Co přidá vlastní moderátorský bot

  • Slash příkazy pro moderátory: /timeout, /purge, /slowmode, kick a ban, pokaždé se zaznamenaným důvodem.
  • Kanál s mod logem, kde uvidíte příchody, odchody, smazané zprávy a každý zásah vašich moderátorů.
  • Vlastní pravidla: varování, která se sčítají až k timeoutu, přibrzdění nových účtů, odkazy povolené jen v některých kanálech.
  • Všechno na jednom místě, vyladěné pro vaši komunitu místo výchozího nastavení veřejného bota.

Pokud jste ještě žádného bota nevytvářeli, projděte nejdřív návod jak vytvořit Discord bota: založíte aplikaci, získáte token a spustíte první příkaz /ping. Kód níže na něj navazuje.

Oprávnění, pořadí rolí a intenty

Pozvěte bota jen s oprávněními, která jeho příkazy opravdu používají:

AkceOprávnění
Dát členovi timeout (až na 28 dní)Moderate Members
Vyhodit členaKick Members
Zabanovat členaBan Members
Mazat zprávyManage Messages a Read Message History
Nastavit slow modeManage Channels

Na pořadí rolí záleží. Bot může zasahovat jen proti členům, jejichž nejvyšší role je pod jeho vlastní nejvyšší rolí. V Server Settings → Roles přetáhněte roli bota nad role, které má moderovat. Vlastníkovi serveru ani členovi s oprávněním Administrator nemůže dát timeout nikdo.

Intenty. Slash příkazy nepotřebují žádný privilegovaný intent. Pro moderaci se hodí dva: Server Members pro logování příchodů a odchodů a Message Content, pokud bot čte zprávy a filtruje je sám. Zapnete je v Developer Portalu v sekci Bot → Privileged Gateway Intents. Od června 2026 je Discord posuzuje jen u aplikací, které dosáhnou více než 10 000 uživatelů; pod touto hranicí stačí přepínač.

Moderační příkazy v Pythonu (discord.py)

S nainstalovaným discord.py 2.7 (pip install discord.py) přidá tento bot.py příkazy /timeout, /purge a /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 skryje každý příkaz před členy bez daného oprávnění. Správci serveru mohou změnit, kdo ho vidí, v Server Settings → Integrations. Limity v kódu jsou ty od Discordu: 40 320 minut je 28 dní a slow mode jde až na 6 hodin.

Příkaz timeout v JavaScriptu (discord.js)

S discord.js 14 (npm install discord.js) vypadá stejný /timeout takto. moderatable před pokusem ověří pořadí rolí a oprávnění bota:

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 a ban fungují stejně, přes member.kick(reason) a member.ban({ reason, deleteMessageSeconds }). Ban může zároveň smazat až 7 dní zpráv daného člena.

Logování toho, co se děje

  • Vždy uvádějte důvod. Knihovny ho posílají do audit logu Discordu (Server Settings → Audit Log), který uchovává záznamy 45 dní.
  • Každý zásah posílejte také do soukromého kanálu s mod logem: kdo zasáhl, proti komu, proč a na jak dlouho. Na rozdíl od audit logu tam historie zůstane tak dlouho, jak chcete.
  • Příchody a odchody vyžadují intent Server Members; logujte i datum vytvoření účtu, ať odhalíte čerstvě založené jednorázové účty.
  • Smazané a upravené zprávy lze logovat i s textem jen tehdy, když má bot intent Message Content.

Pamatujte na limit hromadného mazání: Discord smaže nejvýš 100 zpráv na jedno volání a zprávy starší než dva týdny odmítne, takže /purge je na čerstvý spam, ne na úklid starého kanálu.

Udržte bota online

AutoMod pracuje i bez vás, ale vaše příkazy a logy skončí ve chvíli, kdy se zastaví proces bota. Moderátorský bot na domácím PC je offline přesně tehdy, když PC spí, a raidy na pracovní dobu čekají jen zřídka.

Na hostingu Discord botů od HytHost nahrajete projekt, zvolíte prostředí (Node.js, Python, Java, Go, C#, Bun nebo Lavalink) a token uložíte do proměnné při spuštění místo do kódu. Panel bota spustí a po pádu ho znovu nastartuje. Celé nastavení najdete v návodu jak hostovat Discord bota 24/7.

Moderátorský bot funguje, jen dokud běží: hosting Discord botů od HytHost podporuje Python, Node.js a 5 dalších prostředí, od €0.89/měs.

Zobrazit tarify hostingu botů
FAQ

Často kladené otázky

Pro mnoho serverů AutoMod stačí: blokuje klíčová slova, nahlašovaná slova, spam zmínek i podezřelý spam a umí členům dát timeout. Bota přidejte, když vaši moderátoři potřebují příkazy jako purge a slow mode, vlastní pravidla nebo úplný log zásahů.

Jen ta, která používají jeho příkazy: Moderate Members pro timeouty, Kick Members, Ban Members, Manage Messages spolu s Read Message History pro mazání zpráv a Manage Channels pro slow mode. Nedávejte mu Administrator.

Obvykle kvůli pořadí rolí: bot může zasahovat jen proti členům, jejichž nejvyšší role je pod jeho vlastní, takže roli bota v Server Settings posuňte výš. Vlastníkovi serveru a členům s oprávněním Administrator nelze timeout dát vůbec.

Hromadně ne. Hromadné mazání v Discordu přijme nejvýš 100 zpráv najednou a jen zprávy mladší než dva týdny. Starší zprávy jdou smazat jen jednu po druhé, což je pomalé.

Jen pokud zprávy čte sám, například aby filtroval slova nebo logoval text smazaných zpráv. Slash příkazy, timeouty, bany i purge fungují bez něj.

Hostujte svého moderátorského bota

Hosting Discord botů od HytHost spustí Python, Node.js, Java, Go, C#, Bun nebo Lavalink, po pádu bota znovu nastartuje a začíná na €0.89/měs.

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

Byl tento návod užitečný?