我的discord.js guildmember 事件都没有发出,我的用户缓存基本上是空的,并且我的函数超时
您是否遇到过以下任何问题:
- 您的guildMemberAdd、guildMemberRemove 和 guildMemberUpdate 事件突然停止工作
- 您的 GuildMemberManager 的缓存为空或接近空
- 您的 GuildMemberManager.fetch() 和 UserManager.fetch() 方法超时
- 如果您指定 fetchAllMembers,您的 client.login() 会超时选项
- 您的公会成员似乎离线
如果您遇到任何这些问题,不幸的是,您对此无能为力。最近,Discord 强制执行了特权意图,这可能会导致上述问题。
什么是特权意图?
特权意图是需要手动启用的敏感数据。 自 2020 年 10 月 27 日起,这些意图默认关闭。
特权意图包括:
-
GUILD_PRESENCES:此意图允许您的机器人访问状态数据。
-
GUILD_MEMBERS:此意图允许您的机器人访问成员数据。
如何启用特权意图
-
前往 Discord 开发者门户:[https://discord.com/developers/applications](https://discord.com/developers/applications)
- 选择您的应用程序
- 点击“机器人”选项卡
- 向下滚动到“特权网关意图”部分
- 启用“服务器成员”和/或“服务器存在”意图
- 单击“保存更改”
如果您的机器人未经验证,您将需要向 Discord 提交支持票证才能请求访问特权意图。
Discord.js 实现
在 Discord 中启用特权意图后开发者门户,您需要在 Discord.js 机器人中启用它们。
为此,请添加以下代码到您的机器人的构造函数:
const client = new Discord.Client({
intents: [
Discord.Intents.FLAGS.GUILD_MEMBERS,
Discord.Intents.FLAGS.GUILD_PRESENCES
]
});
登录后复制
这将为您的机器人启用 GUILD_MEMBERS 和 GUILD_PRESENCES 意图。
您还可以使用 ws 选项启用特权意图:
const client = new Discord.Client({
ws: {
intents: [
Discord.Intents.FLAGS.GUILD_MEMBERS,
Discord.Intents.FLAGS.GUILD_PRESENCES
]
}
});
登录后复制
如果您在启用特权意图后仍然遇到问题,请参考以下内容资源:
- [Discord 开发者门户 - 网关意图](https://discord.com/developers/docs/topics/gateway#gateway-intents)
- [Discord.js 官方指南 - 网关意图](https://discordjs.guide/gateway/intents.html)
- [网关更新常见问题解答](https://discord.com/developers/docs/topics/gateway#gateway-intents)
- [Discord API Github - 问题 1363 - 特权意图](https://github.com/discord /discord-api-docs/issues/1363)
- [Discord 博客 - 机器人的未来不和谐](https://blog.discord.com/the-future-of-bots-on-discord-3d25af28f58e)
以上是为什么我的 Discord.js 公会成员活动没有触发,如何解决?的详细内容。更多信息请关注PHP中文网其他相关文章!