首页 > 解决方案 > 如何从所有分片中获取 users.cache 并将它们放入集合中,就像集合 client.user.cache 返回一样?

问题描述

我有一个不和谐的机器人,它使用:

client.users.cache

这将返回一个 Collection[Map],其中包含机器人缓存的所有用户。我添加了分片,我也想做同样的事情,所以我将其替换为:

client.shard.fetchClientValues('users.cache');

但这会返回一个数组,我需要一个与从以下位置返回的相同的 Collection[Map]:

client.users.cache

有谁知道如何将 Collection[Map] 中的数组转换为与从以下位置返回的数组相同的数组:

client.users.cache

或者如何从所有分片中获取一个与返回的分片相同的 Collection[Map]:

client.users.cache

标签: node.jsarrayscollectionsdiscord.jsbots

解决方案


我认为您可以创建一个新的Collection,遍历数组,并使用该set()方法插入/设置新元素。只需确保键是用户 ID,数据是用户对象:

let results = await client.shard.fetchClientValues('users.cache');
let collection = new Discord.Collection();

results.forEach((users) => {
  users.forEach((user) => {
    collection.set(user.id, new Discord.User(client, user));
  });
});

console.log(collection);

Collection与 非常相似Map,因此它也有可能用可迭代的双元素数组构造,其中第一个元素是键,第二个是值:

let results = await client.shard.fetchClientValues('users.cache');
let collection = new Discord.Collection();

results.forEach((users) => {
  let userCollection = new Discord.Collection(users.map((user) => [user.id, new Discord.User(client, user)]));
  collection = collection.concat(userCollection);
});

console.log(collection);

推荐阅读