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

如何在DiscordJS中将拆分的消息添加到JSON文件指定位置

解决思路与代码修正

核心问题分析

你当前代码的主要问题有两个:一是向reactions数组推送了错误格式的内容(你推的是字符串化的单个元素,而数组需要的是包含role和emoji的对象);二是没有将修改后的内容写回JSON文件,导致重启后修改丢失。

完整解决方案

  1. 确保正确读取JSON文件:如果role_list是直接从文件加载的,需要先通过fs模块读取并解析为JS对象;如果已经是解析后的对象,可跳过这一步。
  2. 构造正确的角色对象:从拆分的消息中提取角色名和表情,组装成和现有数组元素一致的对象结构。
  3. 写入修改后的JSON文件:将更新后的对象重新转为JSON字符串,写回原文件,确保修改持久化。

修正后的代码示例

const fs = require('fs');
const path = require('path');

// 替换为你的JSON文件实际路径
const roleListPath = path.join(__dirname, 'role_list.json');

client.on("message", (message) => {
    // 每次触发时读取最新的JSON文件内容
    let role_list = JSON.parse(fs.readFileSync(roleListPath, 'utf8'));

    if (message.channel.name === role_list.channel && message.content.includes("!addRole")) {
        let splitMessage = message.content.split(" ");
        // 校验输入格式是否正确
        if (splitMessage.length < 3) {
            message.reply("格式错误!请使用 `!addRole 角色名 表情` 的格式");
            return;
        }
        let roleName = splitMessage[1];
        let emoji = splitMessage[2];
        
        // 添加符合格式的角色对象到数组
        role_list.reactions.push({
            role: roleName,
            emoji: emoji
        });

        // 将修改后的内容写回文件,保留格式化缩进
        fs.writeFileSync(roleListPath, JSON.stringify(role_list, null, 2), 'utf8');
        
        message.reply("角色已成功添加!");
    }
});

注意事项

  • 文件路径:务必确认roleListPath指向你的实际JSON文件位置,避免路径错误导致读写失败。
  • 错误处理:如果需要更健壮的逻辑,可以给文件读写操作添加try/catch块,处理文件不存在、权限不足等异常情况。
  • 输入校验:增加拆分元素长度判断,避免用户输入格式错误引发数组越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:45:35