Невозможно прочитать свойство 'role' из null - PullRequest
1 голос
/ 12 февраля 2020

Я хочу, чтобы мой бот отправил личное сообщение пользователю, который присоединяется к моему серверу.

Для этого я использовал:

 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)
}}

Если я удаляю часть, которая отправляет личное сообщение, я не получаю эту ошибку. Что бы это могло быть?

1 Ответ

1 голос
/ 03 марта 2020

Я не думаю, что вы можете найти роли на таких участниках. Вы используете .find() в гильдиях (member.guild.roles.find(r => r.name == "Admin"))

Если вы хотите проверить, получили ли они основную роль, что-то вроде этого должно работать:

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
}

Но я предлагаю вам сделайте для этого отдельную запятую, где вы используете аргументы или что-то еще, чтобы определить, сколько вы хотите набрать в канале, это просто сбивает с толку.

...