1.3.0 • Published 6 years ago
telegraf-session-dynamodb v1.3.0
AWS DynamoDB session middleware for Telegraf
AWS DynamoDB powered session middleware for Telegraf.
Prerequisites
- You have made your AWS access and secret key available through a provided method, like storing them in the ~/.aws/credentials file or export them into environment variables
- You need to install Node.js with a minimum version of 6.10.3
Installation
foo@bar:~$ yarn add telegraf-session-dynamodb
Example
const Telegraf = require('telegraf')
const DynamoDBSession = require('telegraf-session-dynamodb')
const bot = new Telegraf(process.env.BOT_TOKEN)
const dynamoDBSession = new DynamoDBSession({
dynamoDBConfig: {
params: {
TableName: process.env.AWS_DYNAMODB_TABLE
},
region: process.env.AWS_REGION
}
})
bot.use(dynamoDBSession.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 dynamoDBSession = new DynamoDBSession({
dynamoDBConfig: {
params: {
TableName: process.env.AWS_DYNAMODB_TABLE
},
region: process.env.AWS_REGION
}
})
// Retrieve session state by session key
dynamoDBSession.getSession(key)
.then((session) => {
console.log('Session state', session)
})
// Save session state
dynamoDBSession.saveSession(key, session)
API
Options
dynamoDBConfig
:params
:TableName
: AWS DynamoDB Table to store session (default: telegraf-session-dynamodb)
region
: AWS Region (default: ap-northeast-1)
property
: context property name (default:session
)ttl
: Time To Live in minutes, -1 for never expire (default:-1
)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
})
Local Unit Testing
foo@bar:~$ yarn
foo@bar:~$ yarn global add serverless
foo@bar:~$ docker pull lambci/lambda
foo@bar:~$ sls dynamodb install
foo@bar:~$ sls offline start -r ap-northeast-1 --noTimeout &
foo@bar:~$ yarn test:local
Remarks: TTL will NOT work for DynamoDB Local
Remote Unit Testing
- Create the AWS DynamoDB Table in the desired AWS Region
- Use
SessionKey (String)
as primary key - Set
ttl
as the TTL attribute in Manage TTL
foo@bar:~$ aws configure
foo@bar:~$ yarn
foo@bar:~$ yarn test