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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:18:01