每当用户发送dm时,Discord Bot都会关闭

时间:2020-10-26 18:22:11

标签: discord.js

我的机器人保存了聊天记录,在有人向该机器人发送dms之前,它可以完美运行。这是记录消息的代码。

console.log(message.author.username, "||", message.channel.name, "-", message.content);
        let channel = message.channel.name;
        var readmessagefile = fs.readFileSync('./txt-files/logs.txt', 'utf-8');
        var writemessagefile = fs.writeFileSync('./txt-files/logs.txt', 'Time - ' +
        message.createdAt + ' Channel: ' + channel + " ||" + ' User - ' + message.member.user.username + ': ' +
        message.content + "\n" + readmessagefile);

我正在尝试找到一种完全忽略dms的方法,这样它就不会弄乱任何东西。

这是错误:

C:\Documents\Projects\DiscordBot\commands\logs.js:11
        message.createdAt + ' Channel: ' + channel + " ||" + ' User - ' + message.member.user.username + ': ' +
                                                                                         ^

TypeError: Cannot read property 'user' of null

2 个答案:

答案 0 :(得分:1)

您没有在对象成员中初始化用户字段(这是一个Null),它是var消息中的一个字段

答案 1 :(得分:0)

根据message.member文档:

以公会成员的身份代表邮件的作者。仅当消息来自作者仍为行会的行会时可用

问题在于DM不在公会中发送,因此message.member返回null。您应该使用message.author,它也具有username属性,并且在全球范围内可用。

message.member.usermessage.author从技术上讲返回相同的内容。 message.author是创作消息的人的User对象。 message.member是创作消息的人的GuildMember对象。 GuildMember.user是GuildMember的User对象。

他们俩都返回相同的东西,但是要采取另外的步骤。

Author >> User (message.author)
Author >> GuildMember >> User (message.member.user)

此外,您可以使用template literals

来提高代码的可读性
var writemessagefile = fs.writeFileSync(
 './txt-files/logs.txt',
 `Time - ${message.createdAt} Channel: ${channel} || User - ${message.author.username}: ${message.author.content}\n${readmessagefile}`
);