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

如何在特定用户加入Discord服务器时用Python为其分配身份组

Discord.py 新用户加入指定分配身份组故障修复

你提交的代码存在多处语法、逻辑错误,同时缺少必要的权限配置,导致事件无法触发或执行终止,具体修复方案如下:

现有代码错误点

  • member = get(member.id, id=member_id)写法完全错误:get 方法第一个参数要求传入可迭代对象,你错误传入了成员ID整数,且不需要重新对member变量赋值,on_member_join 事件传入的member参数本身就是刚加入服务器的用户对象,同时member_id属于未定义变量,运行会直接报错
  • await member.id(member)为无效代码:member.id是用户的ID属性,不是可调用的协程方法,执行到该行会直接抛出异常,终止后续身份组分配逻辑
  • 缺少指定用户判断逻辑:未判断当前加入的用户是否为目标用户,即使代码跑通也会给所有新加入用户分配身份组,不符合需求
  • 缺少必要的网关意图配置:discord.py v2.x及以上版本默认不接收成员加入事件,需要单独开启对应网关权限,否则on_member_join事件根本不会被触发

修复后可用代码

import discord
from discord.utils import get

# 配置网关意图,必须开启成员意图才能接收成员加入事件
intents = discord.Intents.default()
intents.members = True

client = discord.Client(intents=intents)

# 替换为你自己的目标用户ID、要分配的身份组ID
TARGET_USER_ID = 111111111111111111
TARGET_ROLE_ID = 222222222222222222

@client.event 
async def on_member_join(member):
    # 仅当加入的用户为指定用户时执行分配逻辑
    if member.id == TARGET_USER_ID:
        role = get(member.guild.roles, id=TARGET_ROLE_ID)
        # 确认身份组存在再执行分配,避免报错
        if role:
            await member.add_roles(role)

# 替换为你的机器人Token
client.run("你的机器人Token")

额外配置要求

  • 运行前需进入Discord开发者后台的机器人设置页面,在「Privileged Gateway Intents」分类下开启Server Members Intent开关
  • 你的机器人需要在对应服务器内拥有「管理角色」权限,且机器人自身的身份组排序要高于你要分配的目标身份组,否则会触发权限不足报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:36:04