discord.js结合mongoose开发排行榜显示用户Tag的问题咨询
Discord机器人排行榜功能修复方案
错误原因
- 语法报错根因:
map的回调函数未声明为async,直接在普通函数内使用await属于语法错误,导致JS解析模板字符串时误判符号,抛出缺失}的异常。 - 逻辑异常原因:
client.users.fetch()是异步接口,返回Promise对象,不通过await等待异步执行完成直接读取.tag属性,自然返回undefined。
正确实现代码
// 整段代码需要放在async修饰的函数内运行 const lb = await Promise.all( users .sort(({ Bobux: a }, { Bobux: b }) => b - a) // 按余额降序排序 .slice(0, 15) // 仅保留前15名用户 .map(async ({ User, Bobux }, pos) => { try { // 等待用户信息拉取完成后再取tag属性 const userInfo = await client.users.fetch(User); return `${pos + 1}. ${userInfo.tag} - ${commaNumber(Bobux)} Bobux`; } catch (err) { // 拉取用户失败时兜底显示用户ID,避免整个排行榜崩溃 return `${pos + 1}. 未知用户(${User}) - ${commaNumber(Bobux)} Bobux`; } }) );
额外说明
如果需要同时保留@提及用户的格式,可以把返回内容里的用户tag部分调整为${userInfo.tag} <@${User}>即可。
内容的提问来源于stack exchange,提问作者Bob joe12
相关产品推荐
相关产品推荐

