Discord.js分片模式下获取多分片公会ID列表格式异常求助
解决Discord.js分片获取所有公会ID的格式问题
我来帮你搞定这个分片获取公会ID的问题!你的核心问题是当前的broadcastEval逻辑让每个分片返回了拼接后的字符串,而不是直接返回公会ID数组,导致结果里出现带\n的合并项。
问题根源
你现在的代码是让每个分片把自己的公会ID用\n拼接成单个字符串:
shard.broadcastEval("this.guilds.map(u => u.id).join('\\n')")
所以返回的result数组里,每个元素对应一个分片的拼接结果——比如第二个元素就是该分片下两个公会ID合并成的字符串,自然会出现"469387242767646730\n537085738509008896"这种不符合预期的格式。
最优解决方案
直接让每个分片返回公会ID数组,再把所有分片的数组合并成一维数组即可:
shard.broadcastEval("this.guilds.map(u => u.id)") .then(result => { // 把二维数组扁平化为一维数组 const allGuildIds = result.flat(); console.log(allGuildIds); });
这样执行后,result会是类似["389019673557073925", ["469387242767646730", "537085738509008896"]]的二维数组,调用flat()就能直接得到你想要的["389019673557073925","469387242767646730", "537085738509008896"]。
备选方案(如果你坚持用拼接字符串的方式)
如果你因为某些原因必须保留拼接逻辑,可以在拿到结果后拆分每个字符串再合并:
shard.broadcastEval("this.guilds.map(u => u.id).join('\\n')") .then(result => { // 遍历每个分片的拼接字符串,拆分后合并 const allGuildIds = result.flatMap(str => str.split('\n')); console.log(allGuildIds); });
不过这种方式多了“拼接→拆分”的冗余操作,不如直接返回数组高效,更推荐第一种方案。
内容的提问来源于stack exchange,提问作者Gaeta
相关产品推荐
相关产品推荐

