【问题标题】:Why does deleting a message trigger an error in messageUpdate?为什么删除消息会在 messageUpdate 中触发错误?
【发布时间】:2021-05-10 04:14:52
【问题描述】:

我正在为我的 Discord 机器人制作日志系统。它基本上会在我指定的频道中记录每条已删除或编辑的消息。

一切正常,但是当我添加代码来记录编辑的消息时,删除您的消息开始导致机器人崩溃。当我删除一条消息时,它会在 messageUpdate 中显示一个错误,指出字段值不能为空。不过,它仍然会在崩溃之前记录已删除的消息。

这是我的代码:

client.on("messageDelete", (message) => {
    deletedMessage = message;
    if (message.guild.id == 806539207173472257) {
        const logsDeletedEmbed = new Discord.MessageEmbed()
            .setColor("#ff0000")
            .setTitle(`Deleted message in #${message.channel.name}`)
            .setAuthor(message.author.username, message.author.avatarURL())
            .setDescription(message.content)
            .setTimestamp();
        client.channels.cache.get("807286270274830357").send(logsDeletedEmbed);
    }
});

client.on("messageUpdate", (oldMessage, newMessage) => {
    editedMessage = oldMessage;
    if (oldMessage.guild.id == 806539207173472257) {
        const logsEditedEmbed = new Discord.MessageEmbed()
            .setColor("#277ecd")
            .setTitle(`Edited message in #${oldMessage.channel.name}`)
            .setAuthor(oldMessage.author.username, oldMessage.author.avatarURL())
            .addField("Old message", oldMessage.content)
            .addField("New message", newMessage.content)
            .setTimestamp();
        client.channels.cache.get("807286270274830357").send(logsEditedEmbed);
    }
});

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    这里只是一个猜测(因为我不熟悉 discord bot api),但听起来删除消息也会触发“messageUpdate”事件。基于字段值不能为空的错误,我假设当 messageUpdate 事件触发删除时,oldMessage.content 或 newMessage.content 为空/null/未定义。我的猜测是newMessage.content,因为删除时可能没有新消息。 oldMessage 或 newMessage 对象本身也可能为空/未定义。

    这可以通过添加一些逻辑来解决,以在触发记录编辑的逻辑之前验证您在 oldMessage/oldMessage.content 或 newMessage/newMessage.content 中是否有内容。

    【讨论】:

      【解决方案2】:

      经过反复试验,我遇到了问题。当我删除消息时它不会触发 messageUpdate,它会在我发送消息时触发它。当我发送消息时,它会在没有 oldMessage 和 newMessage 值的情况下触发它。这是我修复它的方法:

      client.on("messageUpdate", (oldMessage, newMessage) => {
        if (oldMessage.content != "" && newMessage.content != "") {
        editedMessage = oldMessage;
          if (oldMessage.guild.id == 806539207173472257) {
            const logsEditedEmbed = new Discord.MessageEmbed()
            .setColor("#277ecd")
            .setTitle(`Edited message in #${oldMessage.channel.name}`)
            .setAuthor(oldMessage.author.username, oldMessage.author.avatarURL())
            .addField("Old message", oldMessage.content)
            .addField("New message", newMessage.content)
            .setTimestamp();
            client.channels.cache.get('807286270274830357').send(logsEditedEmbed);
          }
        }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 2013-12-15
        • 1970-01-01
        • 2021-11-25
        • 2015-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多