【发布时间】:2020-05-27 09:20:59
【问题描述】:
我希望我的机器人向加入我的服务器的用户发送私人消息。
为此,我使用了:
client.on('guildMemberAdd', member => {
const channel = member.guild.channels.find(ch => ch.name === 'benvenuto');
channel.send(`Date il benvenuto a ${member}!`);
member.send('test');
});
一旦用户加入服务器,我就会收到此错误:
TypeError: Cannot read property 'roles' of null
at Client.client.on.message (C:\Users\Kikkiu\Desktop\BotTuttofare\index.js:9:19)
[...]
错误将我带到这部分代码:
if(message.member.roles.find(r => r.name === "Admin") || message.member.roles.find(r => r.name === "Mod")) {
if(!message.author.bot) {
if(message.content == '.del50')
message.channel.bulkDelete(50)
if(message.content == '.del100')
message.channel.bulkDelete(100)
if(message.content == '.del1')
message.channel.bulkDelete(2)
if(message.content == '.del10')
message.channel.bulkDelete(10)
if(message.content == '.del2')
message.channel.bulkDelete(3)
}}
如果我删除发送私人消息的部分,我不会收到此错误。会是什么?
【问题讨论】:
-
这意味着
message.member是null在这部分代码之前发生了一些事情。 -
其实之前并没有太多的事情发生。事实是,当我使用命令
.del100(或当我删除发送消息的部分时)它起作用时,我没有收到此错误。我也在另一个机器人中使用了if(message.member.roles.find(r => r.name === "Admin") || message.member.roles.find(r => r.name === "Mod")) {,它工作得很好。 -
Message.member 仅在消息来自公会时可用。机器人是否有可能收到直接消息?无论如何,您需要先验证成员并确保它不为空,然后再对其进行操作。
-
不,机器人没有收到任何直接消息。为了检查成员不为空,我使用了
client.on('message', message => { if(message.member) { console.log('test') }}成员不为空。我也使用了if(message.member.roles) {,结果相同。但是,一旦用户加入服务器,就会出现上述错误。 (我忘了提到机器人成功地向用户发送了私人消息,但由于上面的错误而崩溃)
标签: javascript node.js discord.js roles