node.js - discord bot 分片和处理来自数组结果的对象
问题描述
所以我已经阅读了有关 broadcastEval 等的文档(https://discordjs.guide/sharding/extended.html#using-functions-continued)
我正在尝试学习如何对我的机器人进行分片,不幸的是,搜索并没有那么富有成效。我的问题:
async function serverLookup(client, { sID, authNm }) {
console.log(`serverID is: ${sID}`);
console.log(`authNm is: ${JSON.stringify(authNm)}`);
const svrInfo = await client.guilds.fetch(sID);
...
}
await bot.shard.broadcastEval(serverLookup, { context: { sID: serverID, authNm: msgAuthor } })
.then(async (server) => {
dispName = server;
...
})
我知道“服务器”将是一组对象,它们已经失去了原来的真实对象表示。文档说“这意味着通常提供给您的便利方法都不可用。如果这对您来说是个问题,您将需要在 broadcastEval 中处理该项目”
所以在这个例子中有一个被调用的辅助函数,这意味着这个函数内部的调用将具有对象属性范围。我上面的代码有 2 个片段,第一个是辅助函数。client.guilds.fetch
也返回一个数组而不是一个对象。我应该“构造”一个新的公会对象来访问我想要的方法,还是有更好的方法来处理这个?
最终,我试图从一个消息对象开始,然后进入服务器的用户列表,以访问昵称。
蒂亚!
解决方案
async function getAuthDispNameFromShardMgr(msg) {
const bot = msg.client;
let dispName = '';
dispName = await bot.shard.broadcastEval(async (client, { guildId, authId }) => {
if(client.guilds.cache.has(guildId)) {
// this is the shard that has this guild
const guild = await client.guilds.cache.get(guildId);
// now we have the guild, get the member.
const member = await guild.members.fetch(authId);
// console.log(`member is: ${member.nickname}`);
return member.nickname;
}
}, { context: { guildId: msg.guild.id, authId: msg.author.id } })
.catch(err => console.error(err));
return dispName.find(res => !!res) || null;
}
推荐阅读
- c# - 从 void 方法检查 IsCompleted,无法返回
- python - TensorFlow 在其较新版本中如何将其内部列表视为张量是否有任何变化?
- vue.js - 修改注册按钮的大小
- javascript - Angular:在新窗口中打开组件,无法更改 URL 和 html 头与主应用程序 html 中的相同
- bash - 无法使用 conda run 运行交互式 shell 脚本
- reactjs - 如何加载图像反应 babel
- c# - 靠墙移动时如何防止从墙上反弹?
- javascript - Primefaces p:selectBooleanCheckBox 不显示复选标记
- python - UndefinedUnitError 如何处理?
- javascript - 选中特定类分组 div 的复选框