![node-vk-bot-api](https://img.shields.io/badge/code%20style-airbnb-brightgreen.svg?style=flat-square)
node-vk-bot-api
🤖 VK bot framework for Node.js, based on Bots Long Poll API.
Install
$ npm i node-vk-bot-api@2 -S
$ npm i node-vk-bot-api@1 -S
Usage
const VkBot = require('node-vk-bot-api')
const bot = new VkBot(process.env.TOKEN)
bot.command('/start', (ctx) => {
ctx.reply('Hello!')
})
bot.startPolling()
Examples
There's a few simple examples.
Methods
constructor(settings)
Create bot.
const bot = new VkBot(process.env.TOKEN)
const bot = new VkBot({
token: process.env.TOKEN,
group_id: process.env.GROUP_ID,
execute_timeout: process.env.EXECUTE_TIMEOUT,
})
.use(middleware)
Add simple middleware.
bot.use((ctx, next) => {
ctx.message.timestamp = new Date().getTime()
next()
})
.command(triggers, ...middlewares)
Add middlewares with triggers for message_new
event.
bot.command('start', (ctx) => {
ctx.reply('Hello!')
})
.event(triggers, ...middlewares)
Add middlewares with triggers for selected events.
bot.event('message_edit', (ctx) => {
ctx.reply('Your message was editted')
})
.on(...middlewares)
Add reserved middlewares without triggers.
bot.on((ctx) => {
ctx.reply('No commands for you.')
})
.sendMessage(userId, message, attachment, keyboard, sticker)
Send message to user.
bot.sendMessage(145003487, 'Hello!', 'photo1_1')
bot.sendMessage(145003487, {
message: 'Hello!',
lat: 59.939095,
lng: 30.315868,
})
.startPolling([timeout])
Start polling with given timeout (25 by default).
bot.startPolling()
Context Methods
.reply(message, attachment, markup, sticker)
Helper method for reply to the current user.
bot.command('start', (ctx) => {
ctx.reply('Hello!')
})
Markup
Keyboards
Markup.keyboard(buttons)
: Create keyboardMarkup.button(label, color, payload)
: Create custom buttonMarkup.oneTime()
: Set oneTime to keyboard
Simple usage
ctx.reply('Select your sport', null, Markup
.keyboard([
'Football',
'Basketball',
])
.oneTime()
)
Advanced usage
ctx.reply('How are you doing?', null, Markup
.keyboard([
[
Markup.button('Normally', 'primary'),
],
[
Markup.button('Fine', 'positive'),
Markup.button('Bad', 'negative'),
],
])
)
Sessions
Store anything for current user in local (or redis) memory.
Usage
const VkBot = require('node-vk-bot-api')
const Session = require('node-vk-bot-api/lib/session')
const bot = new VkBot(process.env.TOKEN)
const session = new Session()
bot.use(session.middleware())
bot.on((ctx) => {
ctx.session.counter = ctx.session.counter || 0
ctx.session.counter++
ctx.reply(`You wrote ${ctx.session.counter} messages.`)
})
bot.startPolling()
API
Options
key
: Context property name (default: session
)getSessionKey
: Getter for session key
Default getSessionKey(ctx)
const getSessionKey = (ctx) => {
return `${ctx.message.from_id}:${ctx.message.from_id}`
}
Stage
Scene manager.
const VkBot = require('node-vk-bot-api')
const Scene = require('node-vk-bot-api/lib/scene')
const Session = require('node-vk-bot-api/lib/session')
const Stage = require('node-vk-bot-api/lib/stage')
const bot = new VkBot(process.env.TOKEN)
const scene = new Scene('meet',
(ctx) => {
ctx.scene.next()
ctx.reply('How old are you?')
},
(ctx) => {
ctx.session.age = +ctx.message.text
ctx.scene.next()
ctx.reply('What is your name?')
},
(ctx) => {
ctx.session.name = ctx.message.text
ctx.scene.leave()
ctx.reply(`Nice to meet you, ${ctx.session.name} (${ctx.session.age} years old)`)
},
)
const session = new Session()
const stage = new Stage(scene)
bot.use(session.middleware())
bot.use(stage.middleware())
bot.command('/meet', (ctx) => {
ctx.scene.enter('meet')
})
bot.startPolling()
API
Stage
constructor(...scenes)
: Register scenes
Scene
constructor(name, ...middlewares)
: Create scene
Context
ctx.scene.enter(name)
ctx.scene.leave()
ctx.scene.next()
ctx.scene.selectStep(index)
License
MIT.