Python开发Discord机器人如何设置仅指定身份组可使用命令
Discord 机器人指定身份组触发命令解决方案
前置操作
- 打开Discord客户端的开发者模式:设置→高级→开启开发者模式
- 回到你的服务器,右键点击你要设置权限的身份组,选择「复制ID」,记下这个ID值
核心逻辑说明
在原有命令触发判断前增加身份组校验逻辑,同时处理私信场景的异常问题(私信场景下消息发送者没有角色属性,直接调用会抛出报错,这也是你之前大概率遇到的报错原因)
修改后完整代码
# 替换为你刚才复制的目标身份组ID TARGET_ROLE_ID = 你复制的身份组ID整数值 if message.content.startswith('$leadershipcmds2'): # 拦截私信触发的命令,避免报错 if not message.guild: return # 校验发送者是否持有指定身份组 has_permission = any(role.id == TARGET_ROLE_ID for role in message.author.roles) if not has_permission: # 无权限时可以选择静默处理,或者发送提示,示例为发送无权限提示 await message.channel.send("你没有权限使用该命令") return # 原有业务逻辑不变 embedVar = discord.Embed(title="hello", description="my commands", color=0x71368a) embedVar.add_field(name="commands", value="$training30 ( post a training in 30 mins)", inline=False) embedVar.add_field(name="commands", value="$training1 ( post a training in 1 hour)", inline=False) embedVar.add_field(name="commands", value="$activityp (pings everyone to get in radios and be more active)", inline=False) embedVar.add_field(name="commands", value="$acceptt (if someone requests a training just do $acceptt to post a training) ", inline=False) embedVar.add_field(name="commands", value="$near (when theres 5 minutes until the training starts)", inline=False) embedVar.add_field(name="commands", value="and more coming soon!!)", inline=False) await message.author.send(embed=embedVar) emoji = '\N{THUMBS UP SIGN}' await message.add_reaction(emoji)
注意事项
- TARGET_ROLE_ID不需要加引号,直接填数字即可
- 如果你使用的是discord.py v2.0及以上版本,需要确保你的机器人开启了「服务器成员权限」和「消息内容权限」,在Discord开发者平台的机器人设置页可以开启
内容的提问来源于stack exchange,提问作者Whatic
相关产品推荐
相关产品推荐

