Discord.js запрос роли v12

#javascript #node.js #arrays #discord #discord.js

Вопрос:

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

Цель моего бота-отправить сообщение на текстовый канал «ГГГГ», когда мои сотрудники на моем сервере присоединятся к голосовому каналу с именем «ХХХХХХ».

Мой Кодовый Блок:

 
client.on('voiceStateUpdate', (oldMember, newMember) => {
    let newUserChannel = newMember.channelID;
    let oldUserChannel = oldMember.channelID;
    if(newUserChannel === "838819904798457928" amp;amp; newMember.roles.cache.has === "839532611948511272")
    { 
        console.log(" example entered " newUserChannel);
    }
    else{
        console.log("Left the channel");
    }
});
 

Мой Код Ошибки :

 if(newUserChannel === "838819904798457928" amp;amp; newMember.roles.cache.has === "839532611948511272")
                                                                      ^

TypeError: Cannot read property 'cache' of undefined
Press any key to continue . . .
 

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

1. .has() это метод, а не свойство. Вам нужно передать в него значение. Например newmember.roles.cache.has("839532611948511272")

Ответ №1:

voiceStateUpdate Событие не возвращает члена Гильдии, оно возвращает состояние голоса.

Поэтому, чтобы получить роли участников, вам сначала нужно будет получить участника из голосового состояния

 client.on('voiceStateUpdate', (oldState, newState) => {
    console.log(newState.member.roles.cache);
});
 

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

1. Огромное спасибо. Я решил свою проблему, и теперь она отлично работает. Я оставляю здесь блок рабочего кода, чтобы наши друзья, которые хотят выполнить такую операцию или у которых возникли проблемы, могли посмотреть и использовать его. code client.on('voiceStateUpdate', (oldState, newState) => { let newUserChannel = newState.channelID; if(newUserChannel === "838819904798457928" amp;amp; newState.member.roles.cache.get('839532611948511272')) { console.log("Rol Var"); } });