Discord · 指南

如何制作 Discord 管理机器人

更新于 October 11, 2026 3 分钟阅读

本页内容
  1. 先从 Discord AutoMod 开始
  2. 自定义管理机器人能多做什么
  3. 权限、身份组顺序和 Intent
  4. 用 Python(discord.py)编写管理命令
  5. 用 JavaScript(discord.js)编写禁言命令
  6. 记录发生的一切
  7. 让机器人保持在线
  8. 常见问题

一个活跃的 Discord 服务器需要永不休息的管理:垃圾信息过滤、快速禁言、清理刷屏消息的手段,以及谁做了什么的记录。其中一部分 Discord 通过 AutoMod 免费提供,剩下的交给你自己写的小机器人。

本指南先从 AutoMod 讲起,因为它可能已经够用;然后用 Python(discord.py)或 JavaScript(discord.js)编写管理命令,并说明让它们正常工作所需的权限、Intent 和日志。

先从 Discord AutoMod 开始

AutoMod 内置于 Discord,在 Discord 一侧运行,所以即使没有任何机器人在线也能工作。打开 Server Settings → AutoMod,你需要拥有 Manage Server 权限。它提供:

  • 自定义词语过滤,可使用你自己的关键词、通配符和正则表达式。
  • 常见违规词:现成的脏话、色情内容和歧视性侮辱词汇列表。
  • 提及刷屏:当一条消息一次提及过多的人时采取行动,上限由你设定。
  • 垃圾内容:Discord 自带的疑似垃圾信息检测。
  • 成员资料过滤:用关键词检查用户名和个人资料。

每条规则都可以选择处理方式:拦截消息、向管理员频道发送警报,或对该成员禁言。你可以豁免特定身份组和频道。拥有 Manage Server 或 Administrator 权限的成员永远不会被过滤。

如果你的问题是垃圾信息、侮辱性言论和大量提及,先设置 AutoMod,看看是否已经足够。当你需要管理员可用的命令、自己的规则和完整的日志时,自定义机器人才物有所值。

自定义管理机器人能多做什么

  • 给管理员用的斜杠命令:/timeout、/purge、/slowmode、踢出和封禁,每次都会记录原因。
  • 管理日志频道,记录成员加入、离开、被删除的消息,以及管理员执行的每一次操作。
  • 你自己的规则:警告累积后自动禁言、新账号暂缓发言、链接只允许在部分频道发送。
  • 一切集中在一处,按你的社区来调整,而不是沿用公共机器人的默认设置。

如果你从没做过机器人,请先按照如何制作 Discord 机器人创建应用、获取令牌并运行第一个 /ping 命令。下面的代码以此为基础。

权限、身份组顺序和 Intent

邀请机器人时,只授予它的命令实际用到的权限:

操作权限
禁言成员(最长 28 天)Moderate Members
踢出成员Kick Members
封禁成员Ban Members
删除消息Manage Messages 和 Read Message History
设置慢速模式Manage Channels

身份组顺序很重要。机器人只能对最高身份组低于其自身最高身份组的成员执行操作。在 Server Settings → Roles 中,把机器人的身份组拖到它需要管理的身份组之上。任何人都无法对服务器所有者或 Administrator 禁言。

Intent。斜杠命令不需要任何特权 Intent。有两个对管理很有用:Server Members 用于记录加入和离开,Message Content 用于机器人自己读取消息并过滤。在 Developer Portal 的 Bot → Privileged Gateway Intents 下开启它们。自 2026 年 6 月起,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 天。
  • 同时把每次操作发到私密的管理日志频道:谁执行的、针对谁、为什么、持续多久。与审核日志不同,这里的历史想保留多久就保留多久。
  • 加入和离开需要 Server Members Intent;记录账号的创建日期,便于发现刚注册的一次性小号。
  • 被删除和编辑的消息只有在机器人拥有 Message Content Intent 时才能连同内容一起记录。

注意批量删除的限制:Discord 每次调用最多删除 100 条消息,并拒绝删除超过两周的消息,所以 /purge 适合清理刚出现的刷屏,而不是清空一个旧频道。

让机器人保持在线

AutoMod 不需要你也能继续工作,但机器人进程一停,你的命令和日志也就随之停止。跑在家用电脑上的管理机器人,恰恰会在电脑休眠时离线,而突袭刷屏很少挑上班时间。

在 HytHost Discord 机器人托管上,你只需上传项目,选择运行环境(Node.js、Python、Java、Go、C#、Bun 或 Lavalink),并把令牌放在启动变量中,而不是写进代码。面板会启动机器人,并在崩溃后自动重启。完整的设置步骤见如何 24/7 托管 Discord 机器人。

管理机器人只有在运行时才起作用:HytHost Discord 机器人托管支持 Python、Node.js 以及另外 5 种运行环境,每月 €0.89 起。

查看机器人托管套餐
常见问题

常见问题解答

对很多服务器来说 AutoMod 就够了:它能拦截关键词、常见违规词、提及刷屏和疑似垃圾信息,还能对成员禁言。当管理员需要批量清理消息、慢速模式这类命令、你自己的规则或完整的操作日志时,再加一个机器人。

只给它的命令用得到的权限:禁言用 Moderate Members,另有 Kick Members、Ban Members,删除消息用 Manage Messages 加 Read Message History,慢速模式用 Manage Channels。尽量不要给它 Administrator。

通常是身份组顺序的问题:机器人只能对最高身份组低于自己的成员操作,所以请在 Server Settings 中把机器人的身份组往上移。服务器所有者和拥有 Administrator 的成员根本无法被禁言。

不能批量删除。Discord 的批量删除一次最多接受 100 条消息,而且只能是两周以内的消息。更早的消息只能一条一条删,速度很慢。

只有在它自己读取消息时才需要,例如过滤词语或记录被删除消息的内容。斜杠命令、禁言、封禁和批量清理都不需要它。

托管你的管理机器人

HytHost Discord 机器人托管支持 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

这篇指南对你有帮助吗?