为什么我编写的Discord自动角色分配机器人on_member_join代码不生效?
问题排查及修复方案
- 核心语法错误修复
你代码中查询到的角色赋值给了变量rank,但调用add_roles方法时传入的是未定义的role变量,运行时会直接触发NameError报错,这是功能失效的最直接原因。
修复后的代码示例:
@bot.event async def on_member_join(member): role = discord.utils.get(member.guild.roles, name="Unverify") await member.add_roles(role)
- 权限配置检查
要保证机器人在对应服务器内拥有管理角色权限,且机器人自身的角色在服务器角色列表中的排序,高于你要分配的Unverify角色,否则会触发权限不足的报错。 - 事件监听意图开启
如果你使用的是discord.py v2.0及以上版本,需要在初始化bot实例时开启成员相关监听意图,否则on_member_join事件不会被触发,初始化参考代码:
import discord from discord.ext import commands intents = discord.Intents.default() intents.members = True bot = commands.Bot(command_prefix='你设置的前缀', intents=intents)
- 角色名匹配检查
确认服务器内实际存在名为Unverify的角色,注意大小写、前后空格都要完全匹配,否则discord.utils.get会返回None,调用add_roles时会触发参数错误。
内容的提问来源于stack exchange,提问作者MDCason
相关产品推荐
相关产品推荐

