2

趣味でhubot-slackを作っています。

私が実装したいのは、hubot が一度に複数の質問を受け取れるようにすることです。たとえば、次のようにします。

user : @hubot: add job 
hubot : what is your job ? 
user : jobless 
hubot : where is your workplace ? 
user : home 
hubot : your job has registered.

ご覧のとおり、ユーザーはコマンドで一度だけイベントをトリガーしますadd job。以下は、それを処理するための私のjavascriptソースです。

呼び出し部分:

robot.respond(/register me/igm, function(msg){
    //var promptConsole = new Prompt(msg);
    var questions = [
        {'question' : 'What is your name ?', 'dataname' : 'name'}
        , {'question' : 'What is your job ?', 'dataname' : 'job'}
    ];
    var promptConsole = new Prompt(msg, questions);
    promptConsole.init().startPrompt(robot);
});

およびプロンプト オブジェクト:

var Prompt = function (msg, questions) {

    console.log(msg);
    this.msg = msg;
    this.user = msg.message.user;
    this.room = msg.message.room;
    this.results;
    this.questions = questions;

    //console.log(user +' is in room [ ' + room + ' ] ');

    this.init = function () {
        this.results = [];
        for(var i = 0; i < questions.length; i ++) {
            var singleQuestion = questions[i];
            var result = {'key': '', 'question' : '', 'value' : ''};
            result.key = singleQuestion.dataname;
            result.question = singleQuestion.question;
            this.results.push(result);
        }
        return this;
    }

    this.startPrompt = function () {
        for(var i = 0; i < this.results.length; i ++) {
            console.log(this.results[i]);
            this.msg.send(this.results[i].question);
        }
    }
}

ただし、ユーザー入力は 1 回しか発生しないため、この関数をrobot.hearまたはで実装することはできません。robot.respond

これを実装する他の方法はありますか?そうでない場合は、この関数を のように多くの部分に分割する必要がadd jobありadd workplaceます。

4

0 に答える 0