我正在为我的 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);
}
});
答案 0 :(得分:0)
这里只是一个猜测(因为我不熟悉 discord bot api),但听起来删除消息也会触发“messageUpdate”事件。基于字段值不能为空的错误,我假设当 messageUpdate 事件触发删除时,oldMessage.content
或 newMessage.content
为空/空/未定义。我的猜测是 newMessage.content
,因为删除时可能没有新消息。 oldMessage
或 newMessage
对象本身也可能为空/未定义。
这可以通过添加一些逻辑来解决,以在触发记录编辑的逻辑之前验证您在 oldMessage
/oldMessage.content
或 newMessage
/newMessage.content
中有内容。< /p>
答案 1 :(得分:0)
经过反复试验,我遇到了问题。当我删除消息时它不会触发 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);
}
}
});