如何使我的discord.js-bot记录消息的编辑?



我正试图使我的bot日志何时以及在消息中编辑了什么。

这是监听器的代码:

client.on('messageUpdate', (oldMessage, newMessage,message) => {
client.on('messageUpdate', (oldMessage, newMessage,message) => {
const MessageLog = client.channels.cache.find(channel => channel.id ==='802262886624919572');
var embed = new Discord.MessageEmbed()
.setAuthor(message.author.username).catch(console.error)
.setTimestamp(new Date())
.setColor('#392B47')
.addFields(
{name: 'original:',value: oldMessage},
{name: 'edit:', value: newMessage}    );
MessageLog.send(embed);
});

到目前为止,他在获取message.author.username时遇到了问题我已经尝试用oldmessage和newmessage定义消息,但那里有相同的问题。

控制台日志:TypeError: Cannot read property 'author' of undefined

错误信息显示message未定义。问题是,messageUpdate事件没有给出最后的消息作为参数(https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-messageUpdate)要解决这个问题,您可以将message.author.username中的消息替换为newMessage。

我还发现了您的代码的另一个问题,当您将字段添加到嵌入时,您应该使用newMessage.content作为值,而不仅仅是newMessage

首先,'messageUpdate'事件有两个参数:oldMessage和newMessage。
第二,你不能在MessageEmbed上使用.catch。因此,我们将删除这部分代码并将其替换为用户检查。
第三件事,你不需要链接messageUpdate事件。
第四件事,你可以调用setTimestamp为空,因为它将默认为Date.now()(源)
让我们来修复你的代码:

client.on('messageUpdate', (oldMessage, newMessage) => { // Old message may be undefined
if (!oldMessage.author) return;
const MessageLog = client.channels.cache.find(channel => channel.id ==='802262886624919572');
var embed = new Discord.MessageEmbed()
.setAuthor(newMessage.author.username)
.setTimestamp()
.setColor('#392B47')
.addFields(
{name: 'original:',value: oldMessage},
{name: 'edit:', value: newMessage}    );
MessageLog.send(embed);
}

最新更新