Discord.js获取两个用户之间的公用服务器

时间:2020-07-10 04:57:54

标签: javascript discord.js

我正在寻找两个不和谐的User之间的公用服务器。目前,我的机器人可以访问它所属的行会,但是给定已向其发送消息的用户,则它无法访问该用户的任何行会。我了解到,不和会限制您查看共享的行会/服务器,但是我什至找不到任何访问它们的方法。

任何帮助将不胜感激。

上下文:DM

guild = message.client.guilds.cache.find(clientGuild=>message.author.????)

我想要类似的东西

guild = message.client.guilds.cache.find(clientGuild=>message.author.guilds.includes(clientGuild)

1 个答案:

答案 0 :(得分:0)

这不适用于分片。我还没有分片经验,所以我会把它留给有经验的人。

获取公会当前用户和发送消息的用户

您可以尝试使用缓存的成员(并祈祷用户被缓存,如果用户发送了消息但不能保证就是这种情况)或获取成员。

使用缓存的幼稚方式:

公会对象有一个 member 方法可以从用户那里获取成员对象。您可以简单地检查它是否未定义以查看用户是否在公会中并且被缓存

client.guilds.cache.filter(guild => !!guild.member(message.author));

使用 fetch 的较长方法

这将获取成员,因此具有高公会数量的机器人可能会达到速率限制(查看文档 here)。

var guilds = Promise.all(
    client.guilds.cache.map(async guild => [
        guild.id,
        await guild.members.fetch(message.author).catch(() => null))
    ])
).then(guilds => guilds.filter(g => g[1]).map(guild => client.guilds.resolve(guild[0]));

它的工作原理是尝试从机器人所在的每个公会中获取成员(fetch 可能会失败,因此有一个只返回 null 的捕获),然后根据结果过滤公会。 collection 类上没有异步过滤器,因此我映射到异步谓词,然后使用 Promise.all 等待它们。

分片

如果您需要分片,应该可以使用 broadcastEval 做同样的事情,但我还没有足够的信心来编写它。