我的discord.js list指令无法从orders.json返回全部订单内容
问题根因
- 核心故障来自循环拼接字符串的逻辑错误:原代码在每次遍历订单时,使用
=重新为orderString赋值,每次循环都会直接覆盖掉上一次写入的内容,循环走完后字符串里只会保留最后一笔遍历到的订单,无法累积所有订单内容。 - 附带的隐患:初始定义
orderString时没有设置默认值,如果orders.json内没有任何订单数据,最终嵌入消息的描述位置会显示undefined。
修复方案
调整字符串拼接逻辑,将覆盖赋值改为内容追加,同时补充空订单场景的兼容处理即可,修改后的完整可运行代码如下:
const fsn = require("fs-nextra"); const Discord = require('discord.js'); module.exports = { name: 'list', description: 'List of all orders', aliases: ['allorders'], execute(message) { fsn.readJSON("./orders.json").then((orderDB) => { // 初始化为空字符串,避免空库时出现undefined let orderString = ''; for (const orderID in orderDB) { const currentOrder = orderDB[orderID]; // 用+=做内容追加,每笔订单的内容接在已有字符串末尾,不覆盖历史内容 orderString += `\`${orderID}\`: ${currentOrder.status}\n`; } // 兼容没有任何订单的边界场景 if (!orderString) { orderString = "当前没有存储任何订单"; } const exampleEmbed = new Discord.MessageEmbed() .setTitle('Here\'s a list of the current orders and their status.') .setDescription(orderString) .setTimestamp() .setFooter(message.member.user.tag, message.author.avatarURL()); message.channel.send(exampleEmbed); }); } }
运行效果
修改后,嵌入消息会完整展示所有订单的ID与状态,示例展示效果:
`ysh`: Ready `lhb`: Unclaimed
补充提示:Discord 的嵌入消息描述有4096字符的长度上限,如果后续订单数量较多、单条内容较长,可以再增加自动拆分、分页加载的逻辑,当前的基础场景已经可以稳定展示全部订单。
内容的提问来源于stack exchange,提问作者Memeloren
相关产品推荐
相关产品推荐

