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

如何让Discord机器人用JSON格式输出Embed消息(仿Carl-bot效果)

看起来你已经朝着实现Carl-bot风格的Embed发送功能迈出了不错的第一步!我来帮你完善这段代码,解决潜在问题,让它更稳定易用。

优化后的Embed发送命令实现

你的核心思路完全正确——通过解析JSON来动态构建Embed,但有几个细节可以优化,避免报错、提升用户体验:

1. 关键优化点

  • 错误捕获:直接用JSON.parse()会在用户输入格式错误时崩溃,必须加异常处理
  • 输入校验:确保用户确实提供了JSON内容,避免空输入导致的问题
  • 版本适配:适配Discord.js v12+的Embed发送格式(旧版本可调整)
  • 权限容错:处理删除消息时的权限不足问题

优化后的完整代码

const Discord = require('discord.js');
module.exports.run = async (bot, message, args) => {
    // 尝试删除用户命令消息,处理权限不足情况
    if (message.deletable) {
        try {
            await message.delete();
        } catch (err) {
            console.error('无法删除命令消息:', err);
        }
    }

    // 检查用户是否输入了JSON内容
    if (!args.length) {
        return message.channel.send('请提供要发送的Embed JSON内容!')
            .then(msg => setTimeout(() => msg.delete(), 5000)); // 5秒后自动清理提示
    }

    const jsonContent = args.join(' ');
    let embedData;

    // 解析JSON并处理格式错误
    try {
        embedData = JSON.parse(jsonContent);
        // 确保解析结果是合法的Embed对象
        if (typeof embedData !== 'object' || Array.isArray(embedData)) {
            throw new Error('输入的JSON必须是单个Embed对象!');
        }
    } catch (err) {
        return message.channel.send(`JSON解析失败:\`${err.message}\``)
            .then(msg => setTimeout(() => msg.delete(), 8000));
    }

    // 发送Embed,适配Discord.js v12+版本
    try {
        await message.channel.send({ embeds: [embedData] });
    } catch (err) {
        message.channel.send('发送Embed失败,请检查JSON是否符合Discord规范!')
            .then(msg => setTimeout(() => msg.delete(), 8000));
        console.error('Embed发送出错:', err);
    }
};

module.exports.config = {
    name: "say",
    description: "通过JSON格式发送自定义Embed消息",
    usage: "-say {\"title\":\"示例标题\",\"description\":\"示例描述\",\"color\":16711680}",
    accessableby: "Members",
    aliases: ["embed"]
};

使用示例

比如要发送一个红色的测试Embed,输入以下命令即可:

-say {"title":"欢迎使用Embed命令","description":"这是一条测试消息","color":16711680,"footer":{"text":"由机器人发送"}}

注意事项

  • 如果你的Discord.js版本是v11或更早,发送Embed时需要把{ embeds: [embedData] }改成{ embed: embedData }
  • JSON格式必须严格:所有字符串和键名都要用双引号,不能有多余的尾逗号
  • 可以参考Discord官方的Embed对象规范来编写合法的JSON结构

内容的提问来源于stack exchange,提问作者Haru-hue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:12:42