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

Python开发Discord机器人如何设置仅指定身份组可使用命令

Discord 机器人指定身份组触发命令解决方案

前置操作

  1. 打开Discord客户端的开发者模式:设置→高级→开启开发者模式
  2. 回到你的服务器,右键点击你要设置权限的身份组,选择「复制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:27:00