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;
...
})

我明白"server"将是一个对象数组,这些对象已经失去了其原始的真实对象表示。文档说到">这意味着通常提供给您的方便方法都不可用。如果这对您来说是一个问题,您将需要处理broadcastEval">

中的项所以在这个例子中有一个被调用的辅助函数,这意味着在这个函数内部的调用将具有对象属性作用域。我上面的代码有2个片段,第一个是辅助函数。client.guilds.fetch也返回一个数组而不是一个对象。我应该"构建"吗?一个新的公会对象来访问我想要的方法,或者有更好的方法来处理这个问题?

最终,我将尝试从一个消息对象开始,并获得服务器的用户列表,以访问昵称。

TIA !

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;
}

相关内容

  • 没有找到相关文章

最新更新