我的discord.js行业协会成员事件没有发出,我的用户缓存基本上是空的,我的函数超时了吗? [英] None of my discord.js guildmember events are emitting, my user caches are basically empty, and my functions are timing out?

查看:18
本文介绍了我的discord.js行业协会成员事件没有发出,我的用户缓存基本上是空的,我的函数超时了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码几周来一直工作得很好,但有几个事件和函数随机停止工作!

首先,我的guildMemberAddguildMemberRemoveguildMemberUpdate事件只是停止执行任何操作。没有出现错误,当我调试我的代码时,我意识到当相应的操作发生时,事件甚至没有被激发。

// const client = new Discord.Client();

client.on('guildMemberAdd', (member) => // not triggering!
 client.channels.cache.get('channel-id').send(`${member.tag} joined!`); // not sending!

其次,当尝试从GuildMemberManager缓存获取成员时,它总是返回undefined

const member = message.guild.members.cache.get(targetID); // undefined

当我随后试图显示该协会成员缓存中的所有成员时,它只显示了我和我的机器人,而不是通常的100多名成员。

然后我尝试使用GuildMemberManager.fetch()获取我的工会中的每个成员:

const members = await message.guild.members.fetch();

但我收到此错误:

[Guild_Members_Timeout]:成员未及时到达。

同样,我确信我的语法是正确的,因为它已经完美地工作了一段时间,而且我最近没有更新任何会影响此代码的内容。

推荐答案

🤖不一致现在强制实施特权意图


意图是什么?

当涉及到预计要处理的数据量时,维护有状态应用程序可能会很困难,尤其是在规模上。网关意图是帮助您减轻计算负担的系统。

网关意图允许您挑选和选择要订阅的事件,这样您就不必耗尽不使用的事件的存储空间。此功能是在V12中的discord.js中引入的

什么是特权意图?

由于数据的敏感性质,某些意图被定义为特权。这些意图是:

  • GUILD_PRESENCES
  • GUILD_MEMBERS

自10月27日起,默认情况下已关闭这些意图。

您可能因此而面临的一些问题

  1. GUILD_PRESENCES

    • memberuser启动时缓存为空(或非常接近)
    • Guild.memberCount退货计入就绪
    • 所有涉及Presences的事件不触发(presenceUpdate)
    • 某些Presence数据返回nullundefined
    • 所有GuildMembers对机器人显示为脱机。
    • client.login()如果您在ClientOptions
    • 中指定了fetchAllMembers选项,则超时
  2. GUILD_MEMBERS

如何启用意图?

通过Discord Developer Portal

首先,您必须从Discorde开发人员站点手动启用意图。转到applications,选择您的应用程序,并在侧边栏上找到&bot&。然后您可以向下滚动,直到看到以下内容:

如截图所示,如果超过75个公会,您的机器人将需要验证。

如果您的机器人已通过验证:

一旦您的机器人通过验证,您将无法在开发人员门户中手动翻转意图开关。要请求白名单访问经过验证的bot的其他特权网关意图,请向我们的支持团队发送工单here! 确保包括您的机器人ID、您请求的意图、所请求意图的用例的基本描述以及该用例的屏幕截图或视频(如果不是面向用户的,则为代码片段!)。

通过discord.js模块:

一旦您取消了其中一个/两个意图,您只需通过discord.js启用它们。discord.js intents guide详细说明了如何执行此操作,但我将在此处对其进行解释。

如果您想要所有意图,则不需要执行这些步骤。默认情况下,不一致会启用所有意图(显然,这两个意图除外)。只要您在开发人员门户中勾选了这两个意图,如果您不关心阻止任何其他意图,您可以停在这里。如果您这样做了,请记住,意图仅受discord.js V12+支持,因此您可能需要升级。

其中一个ClientOptions(ClientOptions是创建客户端时要传递的潜在选项的类型定义)是ws(另一个潜在WebSocket选项的类型定义)。在那里,您将找到intents属性。

intents接受IntentsResolvable,它可以是一个字符串或一个或多个意图字符串数组(如'GUILD_PRESENCES')。All available intents)、位域(与意图对应的数字)、Intents类的实例。

示例:

// using a string
const client = new Discord.Client({ ws: { intents: 'GUILD_PRESENCES' }});

// using an array
const client = new Discord.Client({ ws: { intents: ['GUILD_PRESENCES', 'GUILD_MEMBERS'] }});

// using a bitfield value
const client = new Discord.Client({ ws: { intents: 32509 }));

// using Intents class
const client = new Discord.Client({ ws: { intents: Discord.Intents.PRIVILEDGED }});
const client = new Discord.Client({ ws: { intents: new Discord.Intents(Discord.Intents.ALL) }});

资源:


TL;DR

要解决此问题,请转到:

Discord Developer Portal>;Applications>;您的应用程序>;Bot>;选中两者/任一意图(上面的屏幕截图)

这篇关于我的discord.js行业协会成员事件没有发出,我的用户缓存基本上是空的,我的函数超时了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆