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

Discord机器人Help命令部署服务器后报错:无法发送空消息

Discord机器人Help命令部署后报错:Cannot send an empty message

问题描述

本地开发的Discord机器人Help命令运行正常,但部署到服务器后触发报错:DiscordAPIError: Cannot send an empty message,完整错误栈如下:

throw new DiscordAPIError(request.path, data, request.method, res.status);
^
DiscordAPIError: Cannot send an empty message
at RequestHandler.execute (/home/container/Lee-Goldway/node_modules/discord.js/src/rest/RequestHandler.js:154:13)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async RequestHandler.push (/home/container/Lee-Goldway/node_modules/discord.js/src/rest/RequestHandler.js:39:14) {
method: 'post',
path: '/channels/833629858210250813/messages',
code: 50006,
httpStatus: 400
}

对应命令代码:

const Discord = require("discord.js");
const recon = require('reconlx');
const rpages = recon.ReactionPages
const moment = require('moment');
const fs = require('fs');
module.exports = class HelpCommand extends BaseCommand {
    constructor() {
        super('help', 'moderation', []);
    }

    async run(client, message, args) {
        const y = moment().format('YYYY-MM-DD HH:mm:ss')
        const sayEmbed1 = new Discord.MessageEmbed()
            .setTitle(`example`)
        const sayEmbed2 = new Discord.MessageEmbed()
            .setTitle(`example`)
        const sayEmbed3 = new Discord.MessageEmbed()
            .setTitle(`example`)
        const sayEmbed5 = new Discord.MessageEmbed()
            .setTitle(`example`)
        const sayEmbed4 = new Discord.MessageEmbed()
            .setTitle(`example`)
        const sayEmbed6 = new Discord.MessageEmbed()
            .setTitle(`example`)
            .setDescription("[A készítőm Weboldala](https://istvannemeth1245.wixsite.com/inde/)

")

        try {
            await
                message.delete();
            const pages = [{ embed: sayEmbed1 }, { embed: sayEmbed2 }, { embed: sayEmbed3 }, { embed: sayEmbed4 }, { embed: sayEmbed5 }, { embed: sayEmbed6 }];
            const emojis = ['◀️', '▶️'];
            const textPageChange = true;
            rpages(message, pages, textPageChange, emojis);

        } catch (err) {
            console.log(err);
            message.channel.send('Nem tudom ki írni az üzenetet');
        }
        const contetn = `
[${y}] - ${message.author.username} használta a help parancsot. `;
        fs.appendFile('log.txt', contetn, err => {
            if (err) {
                console.err;
                return;
            }
        })
    }
}

解决方案

1. 修复await语法错误

代码中await与message.delete()分两行书写,JavaScript会自动插入分号,导致await未正确等待消息删除完成,后续代码可能在消息已被删除的状态下执行,触发发送空消息的错误。修正为:

await message.delete();

2. 同步依赖版本

本地与服务器的discord.js、reconlx版本不一致可能导致API调用逻辑冲突。执行以下步骤同步版本:

  • 本地生成版本锁定文件:npm install
  • 服务器端安装匹配版本依赖:npm ci

3. 确保Embed内容非空

服务器环境下可能因编码问题导致Embed内容解析异常,为每个Embed补充基础描述,保证内容有效:

const sayEmbed1 = new Discord.MessageEmbed()
    .setTitle(`example`)
    .setDescription("帮助页面第一页");

4. 优化错误处理逻辑

原错误处理中,若message已被删除,message.channel.send会失效。提前保存频道对象,避免依赖已删除的消息对象:

async run(client, message, args) {
    const targetChannel = message.channel; // 提前保存频道引用
    // ... 其他代码
    try {
        await message.delete();
        // ... ReactionPages调用逻辑
    } catch (err) {
        console.log(err);
        targetChannel.send('无法发送消息'); // 使用保存的频道对象发送提示
    }
    // ... 日志代码
}

5. 修正日志代码的拼写错误

日志代码中存在两处拼写错误,修正后避免日志功能异常:

const content = `
[${y}] - ${message.author.username} használta a help parancsot. `;
fs.appendFile('log.txt', content, err => {
    if (err) {
        console.error(err); // 修正console.err为console.error(err)
        return;
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:01:04