You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于wio.db开发topcoins命令:生成kwanzas前20富豪榜及查询自身位次

实现'topcoins'富豪榜单命令(基于wio.db)

需求概述

  • 提取数据库中所有用户的kwanzas数值
  • 生成排名前20的富豪榜单
  • 显示命令发起者在该榜单中的位次

现有信息

数据库结构示例

{
    "usuario": {
        "982405935404285962": {
            "economia": {
                "kwanzas": 20000,
                "banco": -20000,
                "trabalho": 1661702099111,
                "aposta": false,
                "roubo": 1661712130044
            },
            "nome": "vk 7vvch#0007",
            "xp": {
                "xp": 24,
                "max": 50,
                "level": 1
            }
        },
        "992935083231150231": {
            "economia": {
                "kwanzas": 115139,
                "banco": 0,
                "aposta": false
            },
            "nome": "krozz#0007",
            "xp": {
                "xp": 22
            }
        }
    }
}

当前单用户数据获取方式

client.userdb.get(`usuario.'id'.economia.kwanzas`)

实现方案

核心思路

  1. 一次性获取所有用户数据
  2. 转换为可排序的数组,提取关键信息(用户ID、昵称、kwanzas)
  3. 按kwanzas降序排序
  4. 截取前20条生成榜单
  5. 定位发起者在排序后的数组中的位置,计算位次

代码示例

// 以Discord.js命令结构为例,可根据实际框架调整
async function topcoinsCommand(interaction) {
    // 1. 获取所有用户数据
    const allUsers = await client.userdb.get('usuario');
    if (!allUsers) {
        return interaction.reply('暂无用户数据');
    }

    // 2. 转换为数组并处理缺失字段
    const userList = Object.entries(allUsers).map(([userId, userData]) => ({
        id: userId,
        name: userData.nome || '未知用户',
        kwanzas: userData.economia?.kwanzas || 0
    }));

    // 3. 按kwanzas降序排序
    const sortedUsers = userList.sort((a, b) => b.kwanzas - a.kwanzas);

    // 4. 生成前20榜单内容
    const top20 = sortedUsers.slice(0, 20);
    let leaderboard = '🏆 富豪榜单(前20名)\n';
    top20.forEach((user, index) => {
        leaderboard += `${index + 1}. ${user.name} - ${user.kwanzas.toLocaleString()} Kz\n`;
    });

    // 5. 查找发起者位次
    const authorIndex = sortedUsers.findIndex(user => user.id === interaction.user.id);
    if (authorIndex !== -1) {
        const authorRank = authorIndex + 1;
        leaderboard += `\n你的位次:第${authorRank}名(拥有${sortedUsers[authorIndex].kwanzas.toLocaleString()} Kz)`;
    } else {
        leaderboard += '\n你还没有任何Kz数据哦';
    }

    // 发送结果
    interaction.reply(leaderboard);
}

注意事项

  • 若存在多个用户kwanzas数值相同的情况,上述代码会按原始数据顺序排序,如需并列排名逻辑,可额外处理(比如记录上一名分数,相同分数则位次一致)
  • 调用wio.db方法时必须使用异步操作(await),避免数据未加载完成就执行后续逻辑
  • 对缺失economia或kwanzas字段的用户,默认设为0,防止程序报错

内容的提问来源于stack exchange,提问作者Bondzinn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:27:35