Node.js Discord.js-将动态命令处理程序与收集器/等待消息混合

Node.js Discord.js-将动态命令处理程序与收集器/等待消息混合,node.js,discord,discord.js,bots,Node.js,Discord,Discord.js,Bots,我目前正在编程一个Discord机器人,在收到某个命令提示后进行回复。由于这些命令可能会让人困惑,我想让它提问,收集用户的回复,然后根据这些回复,用正确的答案回复 这是我现在掌握的密码。我尝试添加收集器/等待消息,但失败 const fs = require('fs'); const Discord = require('discord.js'); const { prefix, token } = require('./config.json'); const client = new Di

我目前正在编程一个Discord机器人,在收到某个命令提示后进行回复。由于这些命令可能会让人困惑,我想让它提问,收集用户的回复,然后根据这些回复,用正确的答案回复

这是我现在掌握的密码。我尝试添加收集器/等待消息,但失败

const fs = require('fs');
const Discord = require('discord.js');
const { prefix, token } = require('./config.json');

const client = new Discord.Client();
client.commands = new Discord.Collection();

const commandName = fs.readdirSync('./commands');
const commandSmokes = fs.readdirSync('./smokes');
const commandMolotovs = fs.readdirSync('./molotovs');
const commandFlashbangs = fs.readdirSync('./flashbangs');

// Loads files under commands sub-folders
for (const folder of commandName) {
    const commandFiles = fs.readdirSync(`./commands/${folder}`).filter(file => file.endsWith('.js'));
    for (const file of commandFiles) {
        const command = require(`./commands/${folder}/${file}`);
        client.commands.set(command.name, command);
    }
}
// Loads files under smokes sub-folders
for (const folder of commandSmokes) {
    const commandFiles = fs.readdirSync(`./smokes/${folder}`).filter(file => file.endsWith('.js'));
    for (const file of commandFiles) {
        const command = require(`./smokes/${folder}/${file}`);
        client.commands.set(command.name, command);
    }
}
// Loads files under molotovs sub-folders
for (const folder of commandMolotovs) {
    const commandFiles = fs.readdirSync(`./molotovs/${folder}`).filter(file => file.endsWith('.js'));
    for (const file of commandFiles) {
        const command = require(`./molotovs/${folder}/${file}`);
        client.commands.set(command.name, command);
    }
}
// Loads files under flashbangs sub-folders
for (const folder of commandFlashbangs) {
    const commandFiles = fs.readdirSync(`./flashbangs/${folder}`).filter(file => file.endsWith('.js'));
    for (const file of commandFiles) {
        const command = require(`./flashbangs/${folder}/${file}`);
        client.commands.set(command.name, command);
    }
}

client.once('ready', () => {
    console.log('Ready!');
});

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).trim().split(/ +/);
    const commandName = args.shift().toLowerCase();

    const command = client.commands.get(commandName)
        || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));

    if (!command) return;

    try {
        command.execute(message, args);
    } catch (error) {
        console.error(error);
        message.reply('Command not available.');
    }
});

client.login(token);
和命令:

module.exports = {
name: 'd2-smoke-xbox-tspawn',
aliases: ['dust-smoke-xbox-tspawn', 'dust2-smoke-xbox-tspawn', 'd2-smoke-xbox-spawn','dust2-smoke-xbox-spawn', 'dust-smoke-xbox-tspawn'],
description: 'Dust 2 - Xbox Smoke From T-Spawn',
execute(message) {
    message.channel.send('https://youtu.be/q91_mN1IUpw 64 tick | https://youtu.be/q91_mN1IUpw 128 tick');
}, 
};
正如您所看到的,为了使其正常工作,命令必须是特定的,而不是为每个子文件夹使用一个命令,然后对其中所需的内容进行排序。 我在找类似的东西

有什么办法使它起作用吗?
谢谢

您可以再次尝试使用waitmessages()。对于每个提示,您可以执行以下操作:

const filter = m => m.author.id === message.author.id;
let utility;
message.channel.send("What kind of utility are you looking for?")
.then(() => message.channel.awaitMessages(filter, { max: 1 }))
.then(collectedMessage => {
    utility = collectedMessage.content;
}
您可以为需要的每个提示执行此操作