Redis session middleware for Telegraf
JavaScript
Clone or download
Permalink
Failed to load latest commit information.
examples refactoring Aug 22, 2017
lib refactoring Aug 22, 2017
test refactoring Aug 22, 2017
.editorconfig initial commit Apr 16, 2016
.eslintignore initial commit Apr 16, 2016
.eslintrc refactoring Aug 22, 2017
.gitignore refactoring Aug 22, 2017
.travis.yml update to telegraf 2.0 Jun 14, 2016
LICENSE initial commit Apr 16, 2016
package.json bump version Aug 22, 2017
readme.md bump version Aug 22, 2017

readme.md

Build Status NPM Version js-standard-style

Redis session middleware for Telegraf

Redis powered session middleware for Telegraf.

Installation

$ npm install telegraf-session-redis

Example

const Telegraf = require('telegraf')
const RedisSession = require('telegraf-session-redis')

const bot = new Telegraf(process.env.BOT_TOKEN)

const session = new RedisSession({
  store: {
    host: process.env.TELEGRAM_SESSION_HOST || '127.0.0.1',
    port: process.env.TELEGRAM_SESSION_PORT || 6379
  }
})

bot.use(session.middleware())

bot.on('text', (ctx) => {
  ctx.session.counter = ctx.session.counter || 0
  ctx.session.counter++
  console.log('Session', ctx.session)
})

bot.startPolling()

When you have stored the session key beforehand, you can access a session without having access to a context object. This is useful when you perform OAUTH or something similar, when a REDIRECT_URI is called on your bot server.

const redisSession = new RedisSession()

// Retrieve session state by session key
redisSession.getSession(key)
  .then((session) => {
    console.log('Session state', session)
  })

// Save session state
redisSession.saveSession(key, session)

API

Options

  • store:
  • property: context property name (default: session)
  • ttl: session ttl in seconds (default: forever)
  • getSessionKey: session key resolver function (ctx) => any)

Default implementation of getSessionKey:

function getSessionKey(ctx) {
  if (!ctx.from || !ctx.chat) {
    return
  }
  return `${ctx.from.id}:${ctx.chat.id}`
}

Destroying a session

To destroy a session simply set it to null.

bot.on('text', (ctx) => {
  ctx.session = null
})