Бот спрашивает пользователя, к какой роли он хочет присоединиться, бот добавляет их к роли на основе ответа - PullRequest
0 голосов
/ 27 августа 2018

В свободное время я медленно изучаю 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 Ответ

0 голосов
/ 27 августа 2018

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

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

...