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

如何使用on_member_update实现用户获角色时自动授予第二角色

功能实现逻辑
  • 首先提前记录两个角色的ID:触发同步的源角色ID、需要自动授予的目标角色ID,可从服务器角色设置页面复制获得
  • on_member_update事件会传入两个参数:before(成员更新前的状态对象)、after(成员更新后的状态对象)
  • 核心判断规则:对比before和after的角色列表,确认成员是新获得源角色,而非移除角色、修改昵称等其他更新操作
  • 符合触发条件后,调用成员对象的角色添加接口,授予目标角色即可
代码实现示例(基于discord.py v2.x版本)
import discord
from discord.ext import commands

# 替换为你自己服务器的对应角色ID
SOURCE_ROLE_ID = 123456789012345678  # 触发同步的源角色
TARGET_ROLE_ID = 876543210987654321  # 要自动授予的目标角色

# 开启必要的特权意图
intents = discord.Intents.default()
intents.members = True  # 必须开启,否则on_member_update事件不会触发

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_member_update(before: discord.Member, after: discord.Member):
    # 校验:用户刚获得源角色(更新前没有,更新后有)
    if before.get_role(SOURCE_ROLE_ID) is None and after.get_role(SOURCE_ROLE_ID) is not None:
        target_role = after.guild.get_role(TARGET_ROLE_ID)
        if not target_role:
            return
        # 授予目标角色,添加异常捕获避免事件崩溃
        try:
            await after.add_roles(target_role)
        except discord.Forbidden:
            print(f"权限不足,无法给用户{after.id}授予目标角色")

bot.run("你的机器人Token")
注意事项
  • 机器人必须拥有「管理角色」权限,且机器人自身的角色层级要高于目标角色,否则角色添加会失败
  • 需要在Discord开发者平台的机器人管理页面,手动开启「Server Members Intent」开关,和代码里的意图配置对应
  • 如果需要实现多组角色的同步逻辑,只需要扩展角色ID配对的判断规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:07