Как создать приглашение DM в Discord.js ?

#javascript #node.js #discord #discord.js #bots

#javascript #node.js #Discord #discord.js #боты

Вопрос:

Я только что узнал, как отправить DM из Discord.js бот, но как я могу превратить это в приглашение? На данный момент мой код выглядит так:

 client.on('message', message => {
  if (message.channel.type == "dm") {
    if (message.author.bot) return;
    if (message.content == "hello") {
      message.author.send("Hello!");
    }
  }
});
  

Но как я могу хранить данные о том, что происходит в этом dm? Если бы я создавал бота, подобного Application Bot, он выбирал бы, что отвечать, на основе предыдущих dm, как я могу заставить это работать? Должен ли я использовать базу данных? Спасибо!

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

1. Wdym с приглашением? Также да, для продолжающейся серии, включающей несколько команд / ответов, обычно используется база данных

2. Итак … вы создаете AI? Если вы хотите, чтобы они отвечали, используя список предустановленных ответов, то вы можете использовать статическую базу данных для этого и использовать for() цикл. Вы можете отправить все данные о том, что говорят люди, и отправить их вам, затем вы можете вручную добавить их в статическую базу данных, и в следующий раз, когда они это скажут, он ответит, используя предустановленный ответ. Но, если вы хотите, чтобы он автоматически отвечал, тогда…

3. Под приглашением я подразумеваю, например, если бы я хотел создать команду для подачи заявки на работу, она спрашивает вас, какая работа, затем задает другие вопросы, основанные на том, что вы ответили на 1-й вопрос

Ответ №1:

Вы можете сделать это с помощью сборщика сообщений, либо с помощью awaitMessages или createMessageCollector .

С awaitMessages :

 // Discord.js v12
const messagesPromise = message.dmChannel.awaitMessages(
  // This is a filter function that allows you to only receive certain messages.
  // Return true to receive the message.
  // This filter will accept all messages.
  msg => true,
  // Options. This example makes the promise resolve after 1 message has been
  // collected.
  {max: 1}
);

// Discord.js v13
const messagesPromise = message.dmChannel.awaitMessages(
  // This example makes the promise resolve after 1 message has been
  // collected.
  {max: 1}
);

messagesPromise.then(messages => {
  // messages is a Collection of messages
  const msg = messages.first();
  // do something...
});
  

С createMessageCollector :

 // Discord.js v12
const collector = message.dmChannel.createMessageCollector(msg => true, {max: 1})

// Discord.js v13
const collector = message.dmChannel.createMessageCollector({max: 1})

collector.on("collect", msg => {
  // do something...
});
  

Вы также можете использовать синтаксис ES2017 async / await с awaitMessages :

 // Note the async here
//                   vvvvv
client.on('message', async message => {
  if (message.channel.type == "dm") {
    if (message.author.bot) return;
    if (message.content == "hello") {
      message.author.send("Hello!");

      const messages = await message.dmChannel.awaitMessages(
        /* () => true, for Discord.js v12 */
        {max: 1}
      );
      const msg = messages.first();
      // do something...
    }
  }
});
  

Для получения дополнительной информации см. ‘Коллекторы’ на discord.js руководство.