Бот спрашивает пользователя, к какой роли он хочет присоединиться, бот добавляет их к роли на основе ответа

Я медленно изучаю javascript в свое свободное время, и я еще не совсем дошел до этого. Но мой друг попросил меня сделать простого бота, который бы отправлял личные сообщения каждому новому пользователю, присоединяющемуся к серверу, спрашивал их, какого цвета они хотели бы, чтобы их имя пользователя было, и добавляет их к роли, которой они отвечают. Роли на сервере не имеют значения разрешений. Это просто цвет для имени пользователя (сервер разногласий - это чат сообщества на основе DeviantArt).

В приведенном ниже отрывке он работает просто отлично, пока пользователь не ответит цветом "синий" и ответом "Пожалуйста, выберите цвет или убедитесь, что вы ввели цвет точно так, как показано". отправляется вместо добавления пользователя к нужной роли и ответа с тем, что цвет. Я вполне уверен, что проблема с этой частью:

user.addTo(server.roles.get("name", `${collected.first().content}`));
newmsg.channel.send(`Your name is now: **${collected.first().content}** Thank you and enjoy the server!`)

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

bot.on('guildMemberAdd', member => {
   member.send("Welcome to RebornWings! Please select a color for your username! **Choices: orange-red, red, blue, blue-green, or purple** Please type exactly how they appear in the list of choices.")
   .then((newmsg) => { //Now newmsg is the message you sent
     newmsg.channel.awaitMessages(response => response.content, {
       max: 1,
       time: 300000,
       errors: ['time'],
    }).then((collected) => {
     user.addTo(server.roles.get("name", `${collected.first().content}`))
     newmsg.channel.send(`Your name is now: **${collected.first().content}** Thank you and enjoy the server!`)
}).catch(() => {
newmsg.channel.send('Please choose a color or be sure you typed the color exactly as shown.');
      });
    });
});

bot.login(config.token);

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

Заранее спасибо за помощь, пока я медленно учусь самостоятельно.

1 ответ

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

Было бы правильно, если бы вы заменили пользователя на member и заменили addTo на addRole.
Также get не используется для этой цели. Вы используете Collection#get с идентификаторами Snowflake (роли сервера сохраняются в коллекции).
Для вашей цели вам просто нужно заменить get на find, и он будет работать нормально. Но, как уже говорилось в Stock Overflaw, я бы сначала проверил, правильно ли сделал ввод пользователь. Вы НИКОГДА не доверяете вводу пользователей вслепую.

Другие вопросы по тегам