Fix bot not working properly in groups

Change example a little bit
This commit is contained in:
Mahdi Dibaiee 2015-06-29 04:19:09 +04:30
parent 7174ad30b1
commit a8c4c0e33f
8 changed files with 59 additions and 73 deletions

View File

@ -11,8 +11,6 @@ npm install telegram-api
The code is well documented. I'm trying to integrate JSDoc / ESDoc into our repository for an easy to access documentation. The code is well documented. I'm trying to integrate JSDoc / ESDoc into our repository for an easy to access documentation.
# Example # Example
Take a look at [demo.js](https://github.com/mdibaiee/node-telegram-api/blob/master/demo.js).
[@JavaScriptBot](https://telegram.me/JavaScriptBot) runs on `demo.js`, you can test it. [@JavaScriptBot](https://telegram.me/JavaScriptBot) runs on `demo.js`, you can test it.
```javascript ```javascript
@ -22,53 +20,46 @@ var Bot = require('telegram-api');
var Message = require('telegram-api/types/Message'); var Message = require('telegram-api/types/Message');
var Question = require('telegram-api/types/Question'); var Question = require('telegram-api/types/Question');
var smartBot = new Bot({ var bot = new Bot({
token: 'YOUR_KEY' token: 'YOUR_KEY'
}); });
// getMe is called before polling starts, setting info property of bot bot.start().then(() => {
smartBot.start().then(() => { console.log(bot.info);
console.log(smartBot.info);
}); });
// Create a new question // polling
// answers is a keyboard layout as defined in Telegram API bot.on('update', update => {
// we're going to reuse this by modifying it's target console.log('Polled\n', update);
const question = new Question()
.text('How should I greet you?')
.answers([['Hey'], ['Hello, Sir'], ['Yo bro']]);
// Called when a message starting with Hi is received
// You can use Regular Expressions, too
// update is an Update object as defined in Telegram API
smartBot.get('Hi', update => {
const message = update.message;
question.to(message.chat.id).reply(message.message_id);
// Send the question, returns a promise, resolves on valid answer,
// rejects in case of an invalid answer
smartBot.send(question).then(answer => {
const msg = new Message().to(id).text('Your answer: ' + answer);
smartBot.send(msg);
}, () => {
const msg = new Message().to(id).text('Invalid answer');
smartBot.send(msg);
});
}); });
// Commands are in the format `/command` or `/command@botusername` in groups const question = new Question({
const test = new Message().text('Test Command'); text: 'How should I greet you?',
smartBot.command('test', update => { answers: [['Hey'], ['Hello, Sir'], ['Yo bro']]
const message = update.message; });
bot.get(/Hi|Hey|Yo/, message => {
const id = message.chat.id; const id = message.chat.id;
smartBot.send(test.to(id)); question.to(id).reply(message.message_id);
bot.send(question).then(answer => {
const msg = new Message().to(id).text('Your answer: ' + answer);
bot.send(msg);
}, () => {
const msg = new Message().to(id).text('Invalid answer');
bot.send(msg);
});
}); });
const hello = new Message().text('Hello'); const hello = new Message().text('Hello');
smartBot.command('start', update => { bot.command('start', message => {
smartBot.send(hello.to(update.message.chat.id)); bot.send(hello.to(message.chat.id));
});
const test = new Message().text('Test Command');
bot.command('test', message => {
bot.send(test.to(message.chat.id));
}); });
``` ```
@ -76,7 +67,6 @@ This will result in:
![@JavaScriptBot](https://github.com/mdibaiee/node-telegram-api/raw/master/demo.gif) ![@JavaScriptBot](https://github.com/mdibaiee/node-telegram-api/raw/master/demo.gif)
# Bots using this module # Bots using this module
[@JavaScriptBot](https://telegram.me/JavaScriptBot) [@JavaScriptBot](https://telegram.me/JavaScriptBot)

View File

@ -99,7 +99,6 @@ var Bot = (function (_EventEmitter) {
_this.update.offset += 1; _this.update.offset += 1;
} }
_this.emit('update', response.result);
result.forEach(function (res) { result.forEach(function (res) {
var text = res.message.text; var text = res.message.text;
if (text.startsWith('/')) { if (text.startsWith('/')) {
@ -112,8 +111,10 @@ var Bot = (function (_EventEmitter) {
var pattern = _ref.pattern; var pattern = _ref.pattern;
return pattern.test(text); return pattern.test(text);
}); });
ev.listener(res); ev.listener(res.message);
}); });
_this.emit('update', result);
}); });
}).bind(this); }).bind(this);

View File

@ -111,6 +111,8 @@ var Message = (function (_Base) {
value: function send(bot) { value: function send(bot) {
var _this = this; var _this = this;
console.log('sending message');
var messageId = undefined; var messageId = undefined;
var reply_markup = JSON.stringify(this._keyboard.getProperties()); var reply_markup = JSON.stringify(this._keyboard.getProperties());
this.properties.reply_markup = reply_markup; this.properties.reply_markup = reply_markup;

View File

@ -80,8 +80,7 @@ var Question = (function (_Message) {
var answers = this.answers; var answers = this.answers;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
_get(Object.getPrototypeOf(Question.prototype), 'send', _this).call(_this, bot).then(function (update) { _get(Object.getPrototypeOf(Question.prototype), 'send', _this).call(_this, bot).then(function (message) {
var message = update.message;
var answer = undefined; var answer = undefined;
answers.forEach(function find(a) { answers.forEach(function find(a) {

54
demo.js
View File

@ -4,52 +4,44 @@ var Bot = require('telegram-api');
var Message = require('telegram-api/types/Message'); var Message = require('telegram-api/types/Message');
var Question = require('telegram-api/types/Question'); var Question = require('telegram-api/types/Question');
var smartBot = new Bot({ var bot = new Bot({
token: 'YOUR_KEY' token: 'YOUR_KEY'
}); });
// getMe is called before polling starts, setting info property of bot bot.start().then(() => {
smartBot.start().then(() => { console.log(bot.info);
console.log(smartBot.info);
}); });
// Create a new question // polling
// answers is a keyboard layout as defined in Telegram API bot.on('update', update => {
// we're going to reuse this by modifying it's target console.log('Polled\n', update);
const question = new Question() });
.text('How should I greet you?')
.answers([['Hey'], ['Hello, Sir'], ['Yo bro']]);
// Called when a message starting with Hi is received const question = new Question({
// You can use Regular Expressions, too text: 'How should I greet you?',
// update is an Update object as defined in Telegram API answers: [['Hey'], ['Hello, Sir'], ['Yo bro']]
smartBot.get('Hi', update => { });
const message = update.message;
bot.get(/Hi|Hey|Yo/, message => {
const id = message.chat.id; const id = message.chat.id;
question.to(id).reply(message.message_id); question.to(id).reply(message.message_id);
// Send the question, returns a promise, resolves on valid answer, bot.send(question).then(answer => {
// rejects in case of an invalid answer
smartBot.send(question).then(answer => {
const msg = new Message().to(id).text('Your answer: ' + answer); const msg = new Message().to(id).text('Your answer: ' + answer);
smartBot.send(msg); bot.send(msg);
}, () => { }, () => {
const msg = new Message().to(id).text('Invalid answer'); const msg = new Message().to(id).text('Invalid answer');
smartBot.send(msg); bot.send(msg);
}); });
}); });
// Commands are in the format `/command` or `/command@botusername` in groups
const test = new Message().text('Test Command');
smartBot.command('test', update => {
const message = update.message;
const id = message.chat.id;
smartBot.send(test.to(id));
});
const hello = new Message().text('Hello'); const hello = new Message().text('Hello');
smartBot.command('start', update => { bot.command('start', message => {
smartBot.send(hello.to(update.message.chat.id)); bot.send(hello.to(message.chat.id));
});
const test = new Message().text('Test Command');
bot.command('test', message => {
bot.send(test.to(message.chat.id));
}); });

View File

@ -64,7 +64,6 @@ export default class Bot extends EventEmitter {
this.update.offset += 1; this.update.offset += 1;
} }
this.emit('update', response.result);
result.forEach(res => { result.forEach(res => {
let text = res.message.text; let text = res.message.text;
if (text.startsWith('/')) { if (text.startsWith('/')) {
@ -74,8 +73,10 @@ export default class Bot extends EventEmitter {
} }
let ev = this._userEvents.find(({pattern}) => pattern.test(text)); let ev = this._userEvents.find(({pattern}) => pattern.test(text));
ev.listener(res); ev.listener(res.message);
}); });
this.emit('update', result);
}); });
}.bind(this); }.bind(this);

View File

@ -72,6 +72,8 @@ export default class Message extends Base {
* @return {promise} returns a promise, resolved with message:answer * @return {promise} returns a promise, resolved with message:answer
*/ */
send(bot) { send(bot) {
console.log('sending message');
let messageId; let messageId;
const reply_markup = JSON.stringify(this._keyboard.getProperties()); const reply_markup = JSON.stringify(this._keyboard.getProperties());
this.properties.reply_markup = reply_markup; this.properties.reply_markup = reply_markup;

View File

@ -45,8 +45,7 @@ export default class Question extends Message {
const answers = this.answers; const answers = this.answers;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
super.send(bot).then(update => { super.send(bot).then(message => {
const message = update.message;
let answer; let answer;
answers.forEach(function find(a) { answers.forEach(function find(a) {