#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 руководство.