Node.js 在嵌入式系统中显示排行榜

Node.js 在嵌入式系统中显示排行榜,node.js,discord.js,better-sqlite3,Node.js,Discord.js,Better Sqlite3,我正在尝试为我的Discord机器人创建一个排行榜命令,但在获取数据显示时遇到了一些问题,我当前的代码只显示顶级用户,您可以在图像中看到有4行,这是因为数据库中有4个条目,所以它获取了信息,但没有显示所有数据。有人能指出我做错了什么/我需要做什么改变来解决这个问题吗。照片中被屏蔽的部分是我的用户名 代码: 常数top10=db 准备 '从得分中选择*,其中guild=?按点数顺序描述限制10;', .allmessage.guild.id; 如果前十名{ 回来 } 对于top10的常量数据{ 让

我正在尝试为我的Discord机器人创建一个排行榜命令,但在获取数据显示时遇到了一些问题,我当前的代码只显示顶级用户,您可以在图像中看到有4行,这是因为数据库中有4个条目,所以它获取了信息,但没有显示所有数据。有人能指出我做错了什么/我需要做什么改变来解决这个问题吗。照片中被屏蔽的部分是我的用户名 代码:

常数top10=db 准备 '从得分中选择*,其中guild=?按点数顺序描述限制10;', .allmessage.guild.id; 如果前十名{ 回来 } 对于top10的常量数据{ 让用户名=; 对于let i=0;i

通过阅读您的代码,我相信您在构建代码时犯了一个错误。从表面上看,您的代码获取top10中的第一项,然后将其添加到字符串中的次数与top10数组的长度相同。然后它获取第一个用户的级别和xp,将其添加到字符串中,然后将其构造为嵌入。 以下是修改后的代码,因此它应该按照您的预期工作:

    let userNames = '';
    let levels = '';
    let xp = '';
    for (let i = 0; i < top10.length; i++) {
      const data = top10[i];
      const user = (await bot.users.fetch(data.user)).tag;

      userNames += `\`${i + 1}\` ${user}\n`;
      levels += `\`${data.level}\`\n`;
      xp += `\`${data.points.toLocaleString('en')}\`\n`;
    }

    const embed = new MessageEmbed()
      .setAuthor(`Leaderboard for ${message.guild.name}`, message.guild.iconURL({ dynamic: true }))
      .setColor(0x51267)
      .addFields({ name: 'Top 10', value: userNames, inline: true },
        { name: 'Level', value: levels, inline: true },
        { name: 'XP', value: xp, inline: true });

    message.channel.send(embed);
    return;

您的问题是,您只需将\n添加到js对象,因此它不起作用。 作为varian,您可以使用数据创建3个ARR,然后将db结果推送信息映射到数据

最好使用message.guild.members.chache.get检查服务器上的用户,因为bot.users.cache.getdata.user.tag在重启bot后,如果用户不在已处理的bot通道中发送任何消息,则返回未绑定的

const top10=db.prepare'SELECT*FROM score WHERE guild=?按点数顺序描述限制10;'。allmessage.guild.id; 如果前十名{ 回来 } 让usersArr=[]; 设levelArr=[]; 设xpArr=[]; top10.forEachdataUser,索引=>{ 让findUser=message.guild.members.cache.getdataUser.user; 如果findUser{ usersArr.push``${index+1}`${user.tag}`; levelArr.pushdataUser.level; xpArr.pushdataUser.points.ToLocalString'en'; } }; const embed=新消息嵌入 .setAuthor${message.guild.name}的排行榜,message.guild.iconURL{dynamic:true} .setColor0x51267 .addFields{name:'Top 10',value:usersArr.join'\n',inline:true},{name:'Level',value:levelArr.join'\n',inline:true},{name:'XP',value:xpArr.join'\n',inline:true}; message.channel.sendebed;
@Ranar Lothbrok对于未缓存的用户,您将在bot.users.cache.getdata.user.tag上遇到一个错误,因此这不是正确的解决方案…抱歉,我不习惯discord.js,所以我忘记了这一点。相反,您应该使用const user=wait bot.users.fetchdata.user.tag;如果用户在缓存中,这将获取该用户,如果不在缓存中,则更新该用户。此处的文档: