Discord.JS: ошибка типа: не удается прочитать свойство ‘роли’ неопределенного

#javascript #discord #discord.js

#javascript #Discord #discord.js

Вопрос:

Это код.

 case 'updatesrole' :
    msg.react("✔️")
    msg.reply("✔️ Added updates role!, to remove, do !removeupdatesrole")
    let role = msg.guild.roles.cache.find(r => r.name === "Updates");

    var member1 = msg.author
    member1.roles.add(role)

case 'removeupdatesrole' :
    member1.roles.remove(role)
    }
})

  

Я получаю эту ошибку.

Ошибка типа: не удается прочитать свойство ‘роли’ неопределенного

Комментарии:

1. Было ли это ссылкой на roles свойство из removeupdatesrole случая или updatesrole

2. removeupdatesrole. @Lioness100

Ответ №1:

Операторы Case представляют собой отдельные блоки кода

Если я правильно читаю код (форматирование немного странное), у вас есть оператор switch и определите переменную в одном из случаев. Если срабатывает другой регистр (в данном случае (ха-ха), «removeupdatesrole»), то эта переменная никогда не создается и выдается ошибка. Чтобы использовать переменную, вам либо нужно создать ее в случае, подобном этому:

 case 'removeupdatesrole' :
  var member1 = msg.member
  member1.roles.remove(role)
}
  

Или создайте его перед всей инструкцией switch, если она используется в нескольких случаях.

В качестве альтернативы, вы могли бы упростить свой код до этого:

 case 'removeupdatesrole' :
  msg.member.roles.remove(role)
}
  

и никогда не придется иметь дело с переменной вообще.

P.S: После того, как вы исправите это, вам придется сделать то же самое с переменной роли. Также объявите его в операторе ‘removeupdatesrole’.

Редактировать: Как указывает Lioness100 в комментариях, msg.member следует использовать вместо msg.author, чтобы включить пользователя в контекст Гильдии вместо Discord в целом. Я соответствующим образом обновил фрагменты кода.

Комментарии:

1. Помните , msg.author возвращает пользовательский объект, когда вам нужен GuildMember объект. Обязательно используйте msg.member вместо этого.

2. Я получаю ошибку ReferenceError: Не удается получить доступ к ‘role’ перед инициализацией сейчас.

3. @moiboi это потому, что вы не объявили переменную роли во втором операторе case, точно так же, как вы не объявили переменную member1 (отсюда мой постскриптум). Вам нужно создать переменную роли во втором операторе case, прежде чем вы сможете ее использовать.