Жду ответа в приватном сообщении discord.js - PullRequest
0 голосов
/ 30 июня 2018

Итак, это работает ПОЧТИ как задумано. У меня есть бот для личных сообщений пользователя, который использует правильную команду в правильном канале сервера. Вместо того, чтобы засорять сервер сообщениями о создании профиля, у меня есть бот, который делает создание профиля в частном порядке. Я знаю / думаю, что проблема с message.channel.awaitMessages, потому что он видит только ответы в исходном канале на сервере, где была введена команда.

Я не уверен, что мне следует заменить message.channel.awaitMessages, чтобы он мог получить ответ в диалоге с личным сообщением, а не на исходном канале создания профиля на сервере.

Я еще не проверял сообщение sql. Я не проверял, что у меня есть, но я уверен, что это не сработает. Я хочу, чтобы ответ, данный пользователем в личном сообщении, был вставлен (возможно, обновлен?) В базу данных MySQL, которую я уже настроил и правильно начал работать. Идентификатор пользователя и имя пользователя занесены в эту таблицу, а остальные вопросы, связанные с профилем, на данный момент не заданы. Поскольку они отвечают на эти вопросы, эти поля могут быть заполнены / обновлены. Любые идеи / предложения приветствуются!

module.exports.run = async (bot, message, args) => {
if(message.channel.id === '460633878244229120') return message.author.send(`Greetings, ${message.author.username}! FIRST QUESTION, **What is the name of your Brawler or Character?**`)
  .then(function(){
    message.channel.awaitMessages(response => message.content, {
      max: 1,
      time: 5000,
      errors: ['time'],
    })
    .then((collected) => {
        message.author.send(`Your Name is: ${collected.first().content}`);
        var sql = (`UPDATE profile SET name = '${message.content}' WHERE id = ${message.author.id}`);
      })
      .catch(function(){
        message.author.send('Please submit a name for your character. To restart Profile creation, please type "!profilecreate" command in Profile Creation channel on the server.');
      });
    });
  }

Заранее спасибо за ваше время!

1 Ответ

0 голосов
/ 01 июля 2018

Я не использую SQL, так что, поскольку вопрос не конкретно об этом, не спрашивайте меня.

Когда вы используете message.channel.awaitMessages, message по-прежнему является первым, который вы передали в функции module.exports.run, а не из send(). Когда send разрешен, он передает новое сообщение, которое вы должны включить в аргументы функции, которую вы помещаете в then: так, вместо .then(function() {}) вам понадобится что-то вроде .then(function(new_message_sent_in_private) {})

Это должно решить проблему:

module.exports.run = async (bot, message, args) => {
if(message.channel.id === '460633878244229120') return message.author.send(`Greetings, ${message.author.username}! FIRST QUESTION, **What is the name of your Brawler or Character?**`)
  .then((newmsg) => { //Now newmsg is the message you sent
    newmsg.channel.awaitMessages(response => response.content, {
      max: 1,
      time: 5000,
      errors: ['time'],
    }).then((collected) => {
      newmsg.channel.send(`Your Name is: ${collected.first().content}`);
      var sql = (`UPDATE profile SET name = '${message.content}' WHERE id = ${message.author.id}`);
    }).catch(() => {
      newmsg.channel.send('Please submit a name for your character. To restart Profile creation, please type "!profilecreate" command in Profile Creation channel on the server.');
    });
  });
}

Позвольте мне сейчас, если это сработало:)

...