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 )