discord.py发送欢迎消息时@bot.event不触发如何解决?
问题根源
你遇到的问题是未开启成员相关的网关特权意图导致的,discord.py 从1.5版本开始要求显式声明需要的网关意图,on_member_join属于需要单独授权的特权事件,默认不会被触发。
解决步骤
- 第一步:修改代码,显式配置并开启成员意图
修改bot初始化部分的代码,增加意图配置:
# 新增意图配置 intents = discord.Intents.default() intents.members = True # 创建bot实例时传入intents参数 bot = commands.Bot(command_prefix=config.PREFIX, case_insensitive=True, intents=intents)
第二步:在Discord开发者后台开启对应特权开关
- 打开Discord开发者门户,进入你的机器人应用页面
- 切换到左侧「Bot」标签页
- 向下滚动找到「Privileged Gateway Intents」分区
- 打开「Server Members Intent」右侧的开关
可选优化(建议添加):
对频道ID做判空处理,避免ID错误导致程序抛出异常:
@bot.event async def on_member_join(member): print("a member joined") welcome_channel = bot.get_channel(851883872186400812) if welcome_channel: await welcome_channel.send(f"<@!{member.id}> just joined the server! Welcome and enjoy your stay!") else: print("欢迎频道ID错误,未找到对应频道")
其他排查点
如果修改后依然有问题,可以逐一检查:
- 确认机器人已经加入对应服务器,且拥有欢迎频道的「发送消息」「提及成员」权限
- 确认填写的频道ID是正确的,不要和服务器ID、消息ID混淆
- 确认你的discord.py版本符合要求,建议使用2.x以上的稳定版本
内容的提问来源于stack exchange,提问作者VioPaige
相关产品推荐
相关产品推荐

