-
Notifications
You must be signed in to change notification settings - Fork 2
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,groupandchannelhave separated states.
npm i redis @botocrat/state --save// 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
})
...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
}
}