Бот спрашивает пользователя, к какой роли он хочет присоединиться, бот добавляет их к роли на основе ответа
Я медленно изучаю 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, я бы сначала проверил, правильно ли сделал ввод пользователь. Вы НИКОГДА не доверяете вводу пользователей вслепую.