You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py机器人:如何仅为单个特定用户开放命令访问权限

在Discord.py中实现特定用户的命令过滤

嘿,我来帮你搞定这个问题!在Discord.py里实现仅允许单个特定用户访问指定命令其实挺简单的,主要是利用**自定义检查(checks)**或者直接在命令函数内判断用户ID。下面给你两种常用的实现方式,按需选择:

方法一:自定义检查装饰器(推荐,可复用)

如果你有多个命令需要限制给同一个用户,这种方式最省心——先写一个通用的检查函数,然后把它作为装饰器加到需要保护的命令上即可。

import discord
from discord.ext import commands

# 替换成你要允许的用户ID(必须是整数类型)
ALLOWED_USER_ID = 123456789012345678

# 初始化机器人,记得开启必要的intents
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

# 自定义检查函数,返回一个命令检查器
def is_authorized_user():
    async def predicate(ctx):
        # 验证调用命令的用户ID是否匹配
        return ctx.author.id == ALLOWED_USER_ID
    return commands.check(predicate)

# 给需要限制的命令加上装饰器
@bot.command(name="secret")
@is_authorized_user()
async def secret_command(ctx):
    await ctx.send("只有你能看到这条专属消息!😎")

# 可选:处理检查失败的提示
@secret_command.error
async def secret_command_error_handler(ctx, error):
    if isinstance(error, commands.CheckFailure):
        await ctx.send("抱歉,你没有权限使用这个命令!")

# 启动机器人
bot.run("你的机器人令牌")

这个装饰器可以重复用在任意命令上,比如再写一个@bot.command()加上@is_authorized_user(),就能自动继承权限限制,非常方便。

方法二:直接在命令内判断(简单直接)

如果只是单个命令需要限制,不想额外写装饰器,直接在命令函数里判断用户ID就够了,代码更简洁:

import discord
from discord.ext import commands

ALLOWED_USER_ID = 123456789012345678

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command(name="private")
async def private_command(ctx):
    # 先检查用户ID
    if ctx.author.id != ALLOWED_USER_ID:
        await ctx.send("你没有权限执行这个命令!")
        return
    # 这里写命令的核心逻辑
    await ctx.send("欢迎回来,专属用户!")

bot.run("你的机器人令牌")

一些注意事项

  • 用户ID获取:在Discord设置里开启「开发者模式」,然后右键目标用户就能复制ID,注意ID是整数,不要写成字符串。
  • 多用户扩展:如果需要允许多个用户,只需把单个ID改成列表,比如ALLOWED_USER_IDS = [123456, 789012],然后判断ctx.author.id in ALLOWED_USER_IDS即可。
  • Intents设置:Discord.py v2.x版本需要在开发者平台开启message_content等必要intents,否则机器人无法接收命令消息。

内容的提问来源于stack exchange,提问作者DefinitivVair0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 03:08:13