![npm](https://camo.githubusercontent.com/cdedf06a2289b31b1327cc884d7add10ceade6102f0dae6d65fe600c0faa7e31/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f626f746661746865722e7376673f7374796c653d666c61742d737175617265)
Getting Started with BotFather
$ cd MyBot
$ npm install botfather --save
// We recommend storing the token as environment variable.
const TOKEN = process.env.TOKEN
const BotFather = require('botfather')
const bf = new BotFather(TOKEN)
Example #1 (Getting basic information about the bot)
bf.api('getMe')
.then(json => {
if(json.ok) {
return json.result
}
console.error(json.description)
})
.then(bot => {
console.info(`Your bot is @${bot.username}, right? :)`)
})
.catch(exception => {
console.error(exception.stack)
})
Example #2 (Sending file)
const fs = require("fs");
// ...
bf.api("sendDocument", {
chat_id: CHAT_ID,
document: fs.createReadStream(PATH_TO_FILE)
})
.then(json => {
if(json.ok) {
return json.result
}
console.error(json.description)
})
.then(result => {
console.info(result)
})
.catch(exception => {
console.error(exception.stack)
})
Example #3 (Extending your own class)
class MyBot extends BotFather {
/**
* @param {string} token
* @see https://core.telegram.org/bots#6-botfather
*/
constructor(token) {
super(token)
this.api('getMe')
.then(json => {
if(json.ok) {
return json.result
}
console.error(json.description)
})
.then(bot => {
console.info(`Your bot is @${bot.username}, right? :)`)
})
.catch(exception => {
console.error(exception.stack)
})
}
}
new MyBot(TOKEN)
Example #4 (Getting updates recursively)
class MyBot extends BotFather {
/**
* @constructor
* @param {string} token
* @see https://core.telegram.org/bots#6-botfather
*/
constructor(token) {
super(token)
this.getUpdates()
}
/**
* @param {Object} parameters
* @see https://core.telegram.org/bots/api#getupdates
*/
getUpdates(parameters = {limit: 100, timeout: 60 * 2}) {
this.api('getUpdates', parameters)
.then(json => {
if(json.ok) {
return json.result
}
console.error(json.description)
setTimeout(() => this.getUpdates(parameters), 5000)
})
.then(updates => {
for(let update of updates) {
this.onReceiveUpdate(update)
}
// offset = update_id of last processed update + 1
if(updates.length > 0) {
const identifiers = updates.map((update) => update.update_id)
parameters.offset = Math.max.apply(Math, identifiers) + 1
}
this.getUpdates(parameters)
})
.catch(exception => {
console.error(exception.stack)
setTimeout(() => this.getUpdates(parameters), 5000)
})
}
/**
* @param {Object} update
* @see https://core.telegram.org/bots/api#update
*/
onReceiveUpdate(update) {
console.log(update)
}
}
new MyBot(TOKEN)