node.js - 如何从所有分片中获取 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
解决方案
我认为您可以创建一个新的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);
推荐阅读
- python-3.x - Flask 中 scikit-multiflow 的动态绘图
- vba - 从 VBA 编辑器运行宏时,SendKeys 与 NumLock 混淆
- reactjs - react-scripts 无法在 azure deploy 上运行 npm run build
- python-3.x - 我可以让这个算法更有效吗?
- r - 使用包含键对的另一个数据框更改数据框列中的值
- c# - VS 代码和 C# 的问题
- kdb - 如何按 KDB 中的字典键排序?
- python - 我收到一个属性错误:'' AttributeError: 'Grid' object has no attribute 'board'''
- pyspark - 从 pyspark 数据帧插入数据时,雪花中的锁定问题
- android - 当元素添加到数组状态时,反应原生 FlatList 重新渲染