discord.js读取JSON文件拼接在线ID后发送到单条消息的问题咨询
问题修复方案
第一步:修复JSON语法错误
你现有的JSON文件存在语法问题,两个用户对象之间缺少逗号,会导致JSON解析失败,修正后内容如下:
{ "796442577058398258": { "online": "true" }, "880126271881904179": { "online": "true" } }
第二步:修改指令代码
问题根源是你在循环中只单独打印每个ID,没有把所有ID收集存储,循环结束后statusIDs变量仅保留最后一次遍历的值,修改后的代码如下:
// require 建议统一放在文件头部,不要写在指令回调内部,避免重复加载 const path = require('path'); const fs = require('fs'); const { MessageEmbed } = require('discord.js'); command(client, 'status', (message) => { const rawdata = fs.readFileSync(path.resolve(__dirname, 'idList.json')) const statusID = JSON.parse(rawdata) // 初始化数组存储所有在线用户的提及字符串 const onlineUsers = [] for (const id in statusID) { // 判断用户在线状态为true的才加入列表 if (statusID[id].online === "true") { onlineUsers.push(`<@${id}>`) } } // 拼接成逗号分隔的单行字符串 const outputStr = onlineUsers.join(', ') // 控制台输出单行结果 console.log(outputStr) const embed = new MessageEmbed() .setColor("GREEN") .setTitle('LSPD Anmelde Liste') // 兼容无在线用户的场景 .setDescription(outputStr || '当前无在线用户') .setFooter(`Status`).setTimestamp() message.reply({ embeds: [embed] }) })
核心修改点说明
- 新增数组
onlineUsers收集所有在线用户的提及格式字符串 - 遍历的时候新增状态判断,仅收录在线状态为true的用户
- 使用
Array.join(', ')方法把数组拼接为逗号分隔的单行字符串,同时用于控制台输出和embed内容填充 - 新增无在线用户的兜底展示逻辑,避免embed描述为空
- 修正了discord.js v13及以上版本发送embed的语法,需要把embed放到
embeds数组中传递
内容的提问来源于stack exchange,提问作者DuBistMutig
相关产品推荐
相关产品推荐

