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

discord.js分类库存系统开发:如何展示全物品及用户对应持有量

实现方案

核心逻辑是先取指定分类的全量物品列表,再把数据库查询到的用户持有数据转成快速查询的映射表,遍历全量列表时逐个匹配数量,未匹配到的默认填0即可。

首先确认存储全量分类物品的JSON文件结构参考如下,后续路径和结构根据你实际情况调整:

// categoryItems.json 示例结构
{
  "fruits": ["apple", "banana", "orange"],
  "candy": ["lollipop", "gummy", "chocolate"]
}

修改后的代码如下:

// 引入全量分类物品JSON,路径替换为你自己的文件实际路径
const categoryItems = require('./categoryItems.json');
const ValidGroup = args[0];

// 先校验分类合法性避免报错
if (!categoryItems[ValidGroup]) {
  return message.channel.send(`不存在${ValidGroup}这个分类`);
}

getInventory(user_id = `${message.author.id}`, group_name = `${ValidGroup}`).then(([rows]) => {
  const InvEmbed = new MessageEmbed()
    .setAuthor(`${message.author.username} | Inventory`)
    .setTimestamp();

  // 将数据库查到的用户持有数据转成「物品名:持有量」的映射表,方便快速查询
  const userItemMap = {};
  rows.forEach(row => {
    // 字段名如果和你实际存储不一致自行调整
    userItemMap[row.item] = row.quantity ?? 0;
  });

  // 遍历当前分类全量物品列表拼接展示内容
  let cardString = '';
  categoryItems[ValidGroup].forEach(itemName => {
    // 未持有的物品默认数量为0
    const count = userItemMap[itemName] ?? 0;
    cardString += `${itemName} - ${count}\n`;
  });

  InvEmbed.setDescription(cardString);
  message.channel.send({ embeds: [InvEmbed] });
});

注意:如果你原代码里的Code、CardFullName变量有实际用途,可以在拼接cardString时自行补充对应格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:09