Skip to content
This repository has been archived by the owner on Nov 18, 2019. It is now read-only.

gradddev/botfather

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm npm npm npm npm

Getting Started with BotFather

Installing BotFather

$ cd MyBot
$ npm install botfather --save

Using BotFather

// 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)

About

Lightweight node.js module for easier use telegram bot platform.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published