Skip to content

State Manager

Alper Kürşat edited this page Feb 28, 2022 · 1 revision

Botocrat State Manager is a Botocrat middleware that provides state storing functionality.

  • State can be persistent or volatile.
  • user, group and channel have separated states.

Installation

npm i redis @botocrat/state --save

Quick Start

// middlewares/stateManager.js
import {createClient} from "redis"
import createStateManager from '@botocrat/state'

const cli = createClient();
await cli.connect()

export default createStateManager({
  cli,
  user: {
    validated: 'persist',
  }
})
...
import stateManager from "./middlewares/stateManager.js"
new Botocrat()
 .use(stateManager)
 .get('message', async (req, res) => {
    const isValidated = res.user.validated

  })
...

Config

Configuration determines the volatility of keys stored in redis.

Parameter Type Default
cli Redis Client Required
namespace string "botocrat"
user IBStateOptions {}
group IBStateOptions {}
channel IBStateOptions {}
type TBExpire = "persist" | number
type TBSGetter = (chat_id: number) => ({
  data: any,
  expire: TBExpire
})
interface IBStateOptions{
  [key: string]: TBExpire | TBSGetter
  default: TBExpire
}
{
  cli,
  namespace: 'state',
  channel: { 
    default: 24 * 60 * 60 // 1d
  },
  group: {
    bot_authorized: 'persist',
    admins: async (chat_id) => {
      const data = await client.getChatAdministrators({ chat_id })
      return {
        data,
        expire: 60 * 60 // 1h
      }
    },
    default: 5 * 60 // 5m
  },
  user: {
    validated: 'persist',
    joined: 'persist',
    default: 10 * 60 // 10m
  }
}

Writing to state

  

Clone this wiki locally