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

Discord.py中on_member_join事件未触发的原因与解决方法

Discord.py的on_member_join事件不触发的问题排查与解决

我正在使用Python 3.8.6结合discord.py开发Discord机器人。我的其他功能(如on_ready和其他命令)均可正常运行,但当成员加入服务器时,on_member_join事件从未被触发。相关代码如下:

from discord.ext import commands
bot = commands.Bot(command_prefix =".")
@bot.event
async def on_ready():
    print('logged on salaud')
@bot.event
async def on_member_join(member):
    print("test")
bot.run("TOKEN")

请问该事件未触发的原因是什么,该如何解决?


这个问题我之前开发Discord机器人时也踩过坑,大概率是网关意图配置和权限的问题,毕竟discord.py从v1.5版本开始对权限管控严格了很多,一步步来解决:

1. 开启服务器成员意图(Server Members Intent)

discord.py 1.5+版本默认不会启用成员相关的网关意图,导致机器人无法接收成员加入的事件通知,需要分两步操作:

  • 第一步:登录Discord开发者平台,找到你的机器人应用,进入Bot页面,拉到Privileged Gateway Intents区域,把Server Members Intent的开关打开,记得保存更改。
  • 第二步:在代码里初始化Bot时,明确声明需要启用的意图:
    from discord.ext import commands
    import discord
    
    # 启用成员相关意图
    intents = discord.Intents.default()
    intents.members = True
    
    bot = commands.Bot(command_prefix=".", intents=intents)
    
    @bot.event
    async def on_ready():
        print('logged on salaud')
    
    @bot.event
    async def on_member_join(member):
        print("test")
    
    bot.run("TOKEN")
    

2. 检查机器人的服务器权限

确保你的机器人在目标服务器中拥有查看服务器成员的权限:进入服务器的设置→角色,找到机器人对应的角色,确认勾选了查看服务器成员权限项。

3. 测试时的小细节

别用机器人所有者的账号测试加入事件!因为所有者账号有特殊权限,可能会导致事件不触发。找个朋友的账号或者用自己的小号加入服务器,才能准确验证事件是否正常工作。

按这几步操作后,on_member_join事件应该就能正常触发了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:42:31