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

如何在discord.py中为有指定自定义状态的成员授予角色并自动移除

功能可行性及实现方案

这两个需求完全可以通过discord.py实现,核心逻辑依赖成员状态更新事件的监听,具体实现要点如下:

  • 前置权限配置
    你需要先开启机器人的两类敏感权限:Presence Intent和Server Members Intent,两类权限都需要在Discord开发者后台的机器人设置页手动开启,同时代码初始化Bot实例时需要声明启用对应的intent,示例代码:
    import discord
    from discord.ext import commands
    
    # 声明启用所需intent
    intents = discord.Intents.default()
    intents.presences = True
    intents.members = True
    
    bot = commands.Bot(command_prefix="你的指令前缀", intents=intents)
    
  • 核心事件监听
    使用discord.py内置的on_member_update事件监听成员信息变动,该事件会在成员自定义状态变更时触发,你可以在事件回调中完成以下判断逻辑:
    • 对比事件触发前后的成员状态,当检测到成员新增了预设的指定自定义状态时,调用member.add_roles(目标角色对象)完成角色授予
    • 当检测到成员原有的指定自定义状态被移除、或修改为其他内容时,调用member.remove_roles(目标角色对象)完成角色移除
  • 注意事项
    • 机器人需要提前被授予「管理角色」权限,且机器人自身的角色排序要高于待操作的目标角色排序,否则会出现权限不足无法修改角色的问题
    • 如果需要支持多状态对应多角色,可以提前用字典存储自定义状态文本和对应角色ID的映射关系,遍历匹配即可
    • 区分自定义状态的类型:如果要匹配的是成员设置的纯文本自定义状态,需要从member.activities中筛选CustomActivity类型的对象,读取其name属性做匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:12:03