首页 > 解决方案 > 通过 fetch 获取公会成员需要很长时间并且抛出异常

问题描述

guild = client.guilds.cache.get("guildid");
guild.members.fetch().then(fetchedMembers=>{console.log(fetchedMembers.length)})

使用 discord.js v12,我尝试使用 fetch 函数获取公会的所有成员,然后从成员列表中获取随机用户名。第一行,从特定 id 获取公会工作得很好,并且几乎立即执行。但是,即使等待了几分钟,我似乎也无法从公会中获取成员。相反,这个错误会在一段时间后抛出 - :

(node:40774) UnhandledPromiseRejectionWarning: Error [GUILD_MEMBERS_TIMEOUT]: Members didn't arrive in time.
at timeout.client.setTimeout (/home/k/n/node_modules/discord.js/src/managers/GuildMemberManager.js:317:16)
at Timeout.setTimeout [as _onTimeout] (/home/k/n/node_modules/discord.js/src/client/BaseClient.js:83:7)
at ontimeout (timers.js:436:11)
at tryOnTimeout (timers.js:300:5)
at listOnTimeout (timers.js:263:5)
at Timer.processTimers (timers.js:223:10)

有什么问题,我该如何解决???

标签: node.jsasynchronousdiscord.js

解决方案


我做了一些研究,似乎有一种方法可以通过正确使用意图来解决这个问题。

您应该像这样创建您的客户端:

const { Client, Intents } = require('discord.js');
const client = new Client({ ws: { intents: ['GUILD_MEMBERS', Intents.NON_PRIVILEGED] } });

它将解决 GUILD_MEMBERS_TIMEOUT 的问题。

确保您已在 Developer Portal 上启用“服务器成员意图”。


推荐阅读