如何在-discord.js中逐个获取多个输入

如何在-discord.js中逐个获取多个输入,discord.js,Discord.js,我如何多次从用户那个里获取输入,存储它,然后发送一个包含输入的嵌入文件 用户类型命令?启动 机器人回复“嗨,在这里键入你的名字” 用户键入名称,然后将其存储在变量中 机器人再次询问“立即键入您喜爱的游戏” 用户输入游戏时,它再次存储在一个变量中 然后,变量被提取,然后被嵌入到一个 const embed=new Discord.MessageEmbed() .setTitle(“爱好”) .set缩略图(message.author.user.displayAvatarURL()) .addDe

我如何多次从用户那个里获取输入,存储它,然后发送一个包含输入的嵌入文件

  • 用户类型命令
    ?启动
  • 机器人回复“嗨,在这里键入你的名字”
  • 用户键入名称,然后将其存储在变量中
  • 机器人再次询问
    “立即键入您喜爱的游戏”
  • 用户输入游戏时,它再次存储在一个变量中
  • 然后,变量被提取,然后被嵌入到一个
  • const embed=new Discord.MessageEmbed()
    .setTitle(“爱好”)
    .set缩略图(message.author.user.displayAvatarURL())
    .addDescription(“”)
    .addDescription(“”)
    .setTimestamp();
    message.channel.send(嵌入);
    
    为了解决这个问题,我创建了一些“脚本”,只是为命令的每个状态预定义了一些例程

    script.js

    class Script {
        constructor (user, options, callback) {
            if (!user.send) {
                throw "Invalid Userhandle";
            }
            this.user = user;
            this.options = options;
            this.state = 0;
            this.callback = callback;
            this.responses = [];
            if (!!this.options.greeting) {
                this.user.send(this.options.greeting)
                    .then()
                    .catch(() => console.log(JSON.stringify(this.options.greeting)));
            }
        };
        interpretMessage(message) {
            if (!this.options.validator[this.state] || typeof this.options.validator[this.state] !== 'function') {
                if (!!this.callback) {
                    this.callback(this.user, this.responses, false);
                    return;
                } else {
                    throw "Invalid User Gatherer Object";
                }
            }
            const [msg, steps] = this.options.validator[this.state](message, this.responses);
            this.user.send(msg)
                .then()
                .catch(() => console.error(msg));   
            if (steps > 0 || steps < 0) {
                if (!!this.responses && !!this.responses[this.state]) {
                    this.responses[this.state] = message;
                } else {
                    this.responses.push(message);
                }
                this.state += steps;
            }
            if (this.state >= this.options.validator.length) {
                this.callback(this.user, this.responses, false);
            }
        };
    };
    
    module.exports = Script;
    
    我的最终用法如下所示:

    const ressource = require('./classes/ressource');
    
    function interpretAuth(msg, args, provider) {
        const usr = msg.author;
    
        const stage_1 = (msg) => {
            let steps = msg.match("^([A-Za-z0-9_ ]{4,32})$") ? 1 : 0;
            let ret;
            if (msg === 'abort') {
                steps = 100; // will result in ending the script
            } else {
                ret = steps === 1 ? 'And now your Password' : 'Gimme your username';
            }
            return [ret, steps]; 
        };
    
        const stage_2 = (msg) => {
            let steps = msg.match("^([A-Za-z0-9\\!\\@\\#\\%\\&\\_\\(\\)\\*\\-\\$\\^\\[\\]]+)$") ? 1 : 0;
            let ret;
            if (msg === 'abort') {
                steps = 100;
            } else {
                ret = steps === 1 ? 'I will check the Auth' : 'Your Password man...';
            }
            return [ret, steps]; 
        };
    
        const options = {
            greeting: 'Ok for Authrole i need your login, so first your username pls',
            validator: [
                stage_1,
                stage_2,
            ]
        };
    
        const callback = (usr, out) => {
            const [username, password] = out;
            // Now we have all, do what ever you want with it.
        };
    
        provider.PrivateInfoGatherer(usr, options, callback);
    };
    

    让我们看看到目前为止你都做了些什么。
    const ressource = require('./classes/ressource');
    
    function interpretAuth(msg, args, provider) {
        const usr = msg.author;
    
        const stage_1 = (msg) => {
            let steps = msg.match("^([A-Za-z0-9_ ]{4,32})$") ? 1 : 0;
            let ret;
            if (msg === 'abort') {
                steps = 100; // will result in ending the script
            } else {
                ret = steps === 1 ? 'And now your Password' : 'Gimme your username';
            }
            return [ret, steps]; 
        };
    
        const stage_2 = (msg) => {
            let steps = msg.match("^([A-Za-z0-9\\!\\@\\#\\%\\&\\_\\(\\)\\*\\-\\$\\^\\[\\]]+)$") ? 1 : 0;
            let ret;
            if (msg === 'abort') {
                steps = 100;
            } else {
                ret = steps === 1 ? 'I will check the Auth' : 'Your Password man...';
            }
            return [ret, steps]; 
        };
    
        const options = {
            greeting: 'Ok for Authrole i need your login, so first your username pls',
            validator: [
                stage_1,
                stage_2,
            ]
        };
    
        const callback = (usr, out) => {
            const [username, password] = out;
            // Now we have all, do what ever you want with it.
        };
    
        provider.PrivateInfoGatherer(usr, options, callback);
    };