Discord · Гайд

Як зробити бота-модератора для Discord

Оновлено October 11, 2026 6 хв читання

На цій сторінці
  1. Почніть з AutoMod у Discord
  2. Що дає власний бот-модератор
  3. Права, порядок ролей і intents
  4. Команди модерації на Python (discord.py)
  5. Команда тайм-ауту на JavaScript (discord.js)
  6. Логування того, що відбувається
  7. Тримайте бота в мережі
  8. FAQ

Активному Discord-серверу потрібна модерація, яка ніколи не спить: фільтри спаму, швидкі тайм-аути, спосіб одним махом прибрати потік повідомлень і запис про те, хто що зробив. Частину цього Discord дає безкоштовно через AutoMod, а решту закриває невеликий власний бот.

Посібник починається з AutoMod, бо його може виявитися досить, далі показує команди модерації на Python (discord.py) або JavaScript (discord.js) і пояснює, які права, intents і логи потрібні, щоб усе працювало.

Почніть з AutoMod у Discord

AutoMod вбудований у Discord і працює на боці Discord, тож діє навіть тоді, коли жоден бот не в мережі. Відкрийте Server Settings → AutoMod; для цього потрібне право Manage Server. Що там є:

  • Власні фільтри слів з вашими ключовими словами, масками та регулярними виразами.
  • Слова, які часто позначають: готові списки для лайки, сексуального контенту й образ.
  • Спам згадками: спрацьовує, коли повідомлення згадує забагато людей одразу, понад заданий вами поріг.
  • Спам-контент: власне розпізнавання підозрілого спаму від Discord.
  • Фільтри профілю учасника: ключові слова перевіряються в іменах користувачів і профілях.

Для кожного правила ви обираєте дію: заблокувати повідомлення, надіслати сповіщення в канал модераторів або дати учаснику тайм-аут. Окремі ролі й канали можна виключити. Учасників із правами Manage Server або Administrator фільтр не чіпає ніколи.

Якщо ваша проблема — спам, образи й масові згадки, спершу налаштуйте AutoMod і подивіться, чи вистачить його. Власний бот виправдовує себе, коли потрібні команди для модераторів, свої правила й нормальний лог.

Що дає власний бот-модератор

  • Слеш-команди для модераторів: /timeout, /purge, /slowmode, кік і бан, і щоразу із записом причини.
  • Канал mod log із входами, виходами, видаленими повідомленнями та кожною дією ваших модераторів.
  • Свої правила: попередження, які разом дають тайм-аут, обмеження для нових акаунтів, посилання лише в окремих каналах.
  • Усе в одному місці й налаштоване під вашу спільноту, а не під типові налаштування публічного бота.

Якщо ви ще ніколи не робили бота, спершу пройдіть посібник як створити бота для Discord: створіть застосунок, отримайте токен і запустіть першу команду /ping. Код нижче спирається на нього.

Права, порядок ролей і intents

Запрошуйте бота лише з тими правами, які використовують його команди:

ДіяПраво
Тайм-аут учасника (до 28 днів)Moderate Members
Вигнати учасника (кік)Kick Members
Забанити учасникаBan Members
Видаляти повідомленняManage Messages і Read Message History
Увімкнути повільний режимManage Channels

Порядок ролей важливий. Бот може діяти лише щодо учасників, чия найвища роль нижча за його власну найвищу роль. У Server Settings → Roles перетягніть роль бота вище за ролі, які він має модерувати. Власнику сервера й Administrator тайм-аут не може дати ніхто.

Intents. Слеш-командам привілейовані intents не потрібні. Для модерації корисні два: Server Members — для логів входів і виходів, і Message Content — якщо бот сам читає повідомлення, щоб їх фільтрувати. Вмикаються вони в Bot → Privileged Gateway Intents у Developer Portal. З червня 2026 року Discord перевіряє їх лише в застосунків, що охоплюють понад 10 000 користувачів; нижче цього порогу досить перемикача.

Команди модерації на Python (discord.py)

Зі встановленим discord.py 2.7 (pip install discord.py) цей bot.py додає /timeout, /purge і /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 приховує кожну команду від учасників без відповідного права. Адміністратори сервера можуть змінити, кому вона видима, у Server Settings → Integrations. Обмеження в коді — це ліміти самого Discord: 40 320 хвилин — це 28 днів, а повільний режим можна поставити щонайбільше на 6 годин.

Команда тайм-ауту на JavaScript (discord.js)

З discord.js 14 (npm install discord.js) та сама команда /timeout виглядає так. moderatable перед спробою перевіряє порядок ролей і права бота:

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);

Кік і бан робляться за тим самим шаблоном через member.kick(reason) і member.ban({ reason, deleteMessageSeconds }). Під час бану можна заразом видалити повідомлення учасника за останні 7 днів.

Логування того, що відбувається

  • Завжди вказуйте причину. Бібліотеки передають її в журнал аудиту Discord (Server Settings → Audit Log), де записи зберігаються 45 днів.
  • Дублюйте кожну дію в закритий канал mod log: хто діяв, щодо кого, чому й на який строк. На відміну від журналу аудиту, там історія зберігається скільки завгодно.
  • Входи й виходи потребують intent Server Members; записуйте дату створення акаунта, щоб помічати свіжі одноразові акаунти.
  • Видалені й відредаговані повідомлення можна логувати разом із текстом, лише якщо бот має intent Message Content.

Пам'ятайте про обмеження масового видалення: Discord видаляє не більше 100 повідомлень за виклик і відмовляється видаляти повідомлення, старші за два тижні, тож /purge — для свіжого спаму, а не для чищення старого каналу.

Тримайте бота в мережі

AutoMod працює й без вас, але ваші команди й логи зупиняються тієї ж миті, коли зупиняється процес бота. Бот-модератор на домашньому ПК іде в офлайн саме тоді, коли комп'ютер засинає, а рейди рідко чекають робочого часу.

На хостингу Discord-ботів HytHost ви завантажуєте проєкт, обираєте середовище виконання (Node.js, Python, Java, Go, C#, Bun або Lavalink) і зберігаєте токен у змінній запуску, а не в коді. Панель запускає бота й перезапускає його після збою. Повне налаштування описано в посібнику як тримати Discord-бота онлайн 24/7.

Бот-модератор працює, лише поки він запущений: хостинг Discord-ботів HytHost підтримує Python, Node.js і ще 5 середовищ виконання, від €0.89/міс.

Тарифи хостингу ботів
FAQ

Поширені запитання

Багатьом серверам AutoMod вистачає: він блокує ключові слова, позначені слова, спам згадками й підозрілий спам, а також уміє давати тайм-аути. Додавайте бота, коли модераторам потрібні команди на кшталт purge і повільного режиму, власні правила або повний лог дій.

Лише ті, що використовують його команди: Moderate Members для тайм-аутів, Kick Members, Ban Members, Manage Messages разом із Read Message History для видалення повідомлень і Manage Channels для повільного режиму. Не давайте йому Administrator.

Зазвичай причина в порядку ролей: бот може діяти лише щодо учасників, чия найвища роль нижча за його власну, тож підніміть роль бота вище в Server Settings. Власнику сервера й учасникам з Administrator тайм-аут дати взагалі не можна.

Не масово. Масове видалення в Discord приймає не більше 100 повідомлень за раз і лише повідомлення, молодші за два тижні. Старіші можна видаляти тільки по одному, а це довго.

Лише якщо він сам читає повідомлення, наприклад щоб фільтрувати слова або логувати текст видалених повідомлень. Слеш-команди, тайм-аути, бани й purge працюють без нього.

Розмістіть свого бота-модератора

Хостинг Discord-ботів HytHost запускає Python, Node.js, Java, Go, C#, Bun або Lavalink, перезапускає бота після збою й коштує від €0.89/міс.

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

Цей гайд був корисним?