首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取null的属性“roles”

无法读取null的属性“roles”
EN

Stack Overflow用户
提问于 2020-02-12 05:43:46
回答 1查看 3.9K关注 0票数 1

我希望我的机器人向加入我的服务器的用户发送一条私人消息。

为此,我使用了:

代码语言:javascript
复制
 client.on('guildMemberAdd', member => {
   const channel = member.guild.channels.find(ch => ch.name === 'benvenuto');
  channel.send(`Date il benvenuto a ${member}!`);
  member.send('test');
});

一旦用户加入服务器,我就会收到这个错误:

代码语言:javascript
复制
TypeError: Cannot read property 'roles' of null
    at Client.client.on.message (C:\Users\Kikkiu\Desktop\BotTuttofare\index.js:9:19)
    [...]

错误将我带到代码的这一部分:

代码语言:javascript
复制
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)
}}

如果我删除发送私人消息的部分,我不会得到这个错误。那会是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-03 16:28:46

我不认为你能在这样的成员中找到角色。你在行会上使用.find() (member.guild.roles.find(r => r.name == "Admin"))

如果您想检查他们是否获得了corect角色,应该可以这样做:

代码语言:javascript
复制
let adminRole = message.guild.roles.get("ADMIN_ROLE_ID") //same with mod role
if (message.member.roles.has(adminRole.id)) {
//If they have admin & mod role they can do this
} else {
//If they do not have the one of the roles, this happens. Either just do return; or do //something like dm them that they don't have roles/permissions
}

但是我建议你做一个单独的命令,在这里你使用args或其他东西来定义你想要在一个通道中批量多少,这只会让人困惑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60177814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档