Discord机器人无法为新加入成员分配角色,是什么原因导致的?
Discord机器人新成员自动分配角色无响应问题排查
- Bot实例化时未传入已配置的intents
你设置了intents.members = True开启成员事件监听,但初始化commands.Bot时没有将intents作为参数传入,配置的监听规则未生效,自然无法触发on_member_join事件。
修正后的初始化代码如下:
- Bot实例化时未传入已配置的intents
client = commands.Bot(command_prefix = ".", intents=intents)
- 角色分配方法调用错误
discord.py v1.5之后的版本,add_roles已经不再是客户端实例的方法,而是member对象的内置方法,你使用的await client.add_roles(member, role)是已经废弃的旧版本写法,运行时会抛出异常导致操作失败。
修正后的调用代码如下:
- 角色分配方法调用错误
await member.add_roles(role)
- 开发者后台未开启对应权限开关
仅代码配置intents不生效,你还需要进入Discord开发者平台的对应Bot管理页面,在「Privileged Gateway Intents」分类下开启Server Members Intent权限,否则Discord官方不会向你的机器人推送成员加入的相关事件。
- 开发者后台未开启对应权限开关
- 机器人权限不足
需要同时满足两个权限要求:
- 机器人在服务器内的角色排序高于你要分配的
member角色 - 机器人被授予了「管理角色」的服务器权限
任意一条不满足,机器人都没有权限为新成员分配角色。
- 机器人权限不足
修正后可正常运行的完整代码
import discord from discord.ext import commands intents = discord.Intents.default() intents.members = True client = commands.Bot(command_prefix = ".", intents=intents) @client.event async def on_ready(): print('Bot is online') @client.event async def on_member_join(member): role = discord.utils.get(member.guild.roles, name='member') await member.add_roles(role) client.run("你的Bot Token")
内容的提问来源于stack exchange,提问作者austin
相关产品推荐
相关产品推荐

