discord.py中on_member_join函数未触发问题求助
解决discord.py中on_member_join事件未触发的问题
核心问题:成员意图设置错误
你代码里的discord.members = True是无效写法,成员意图需要通过intents对象开启,而非直接修改discord模块属性。
修正步骤
- 将
discord.members = True替换为intents.members = True,确保成员意图被正确传递给Client实例 - 确认Discord开发者后台的「服务器成员特权意图」已开启(你已完成此操作)
- 邀请机器人时,确保链接包含
guilds.members.read权限(重置邀请时可勾选对应权限,或直接在链接中添加包含该权限的参数)
修正后的完整代码
import discord from discord import app_commands from discord.ext import commands import responses #my other class with the text responses def run_discord_bot(): TOKEN = 'token here' intents = discord.Intents.default() intents.message_content = True # 正确开启成员意图 intents.members = True client = discord.Client(intents=intents) @client.event async def on_ready(): print(f'{client.user} is now running!') @client.event async def on_member_join(member): print('here') # 现在应该能正常触发打印 # 可在此添加分配默认角色的逻辑,示例: # default_role = discord.utils.get(member.guild.roles, name="默认角色") # if default_role: # await member.add_roles(default_role) client.run(TOKEN)
额外排查点
如果修正后仍未触发,检查以下内容:
- 测试时邀请全新用户进入服务器,
on_member_join仅对首次加入的用户生效,已在服务器的用户重新加入不会触发 - 确保机器人在服务器中的角色位置高于要分配的默认角色,否则无权限为用户添加该角色
内容的提问来源于stack exchange,提问作者Chad.W
相关产品推荐
相关产品推荐

