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
相关产品推荐
相关产品推荐

