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
相关产品推荐
相关产品推荐

