趣味で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
ます。