Ask for arguments

This commit is contained in:
2015-07-09 14:26:17 +04:30
parent 477f99b40c
commit 2aaed21195
4 changed files with 117 additions and 16 deletions

View File

@ -39,11 +39,8 @@ export default function argumentParser(format, string) {
string = string.replace(/[^\s]+/, '').trim();
format = format.replace(/[^\s]+/, '').trim();
if (!format) {
return {};
}
if (!string) return {args: {}, params};
if (!format)
return {args: {}, params: {}};
let indexes = [],
params = {};
@ -66,6 +63,8 @@ export default function argumentParser(format, string) {
return getFormat(null, 'rest');
});
if (!string) return {args: {}, params};
indexes = indexes.sort((a, b) => {
return a.offset < b.offset ? -1 : 1;
});

View File

@ -3,6 +3,7 @@ import webhook from './functions/webhook';
import poll from './functions/poll';
import argumentParser from './functions/argument-parser';
import {EventEmitter} from 'events';
import Message from './types/Message';
const DEFAULTS = {
update: {
@ -165,10 +166,39 @@ export default class Bot extends EventEmitter {
}
if (ev.parse) {
res.message.args = ev.parse(res.message.text);
let {params, args} = ev.parse(res.message.text);
if (!Object.keys(params).length) {
ev.listener(res.message);
return;
}
var bot = this;
function ask(param) {
if (!args[param]) {
bot.send(new Message().text(`Enter value for ${param}`).to(res.message.chat.id))
.then(answer => {
args[param] = answer.text;
iter.next();
});
}
}
function* gen(par) {
let index = 0;
while (index < par.length) {
while (args[par[index]] && index < par.length) index++;
yield ask(par[index]);
index++;
if (index == par.length) {
res.message.args = args;
ev.listener(res.message);
return;
}
}
}
var iter = gen(Object.keys(params));
iter.next();
} else {
ev.listener(res.message);
}
ev.listener(res.message);
});
}
}