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
相关产品推荐
相关产品推荐

