Библиотека для создания чат-ботов ВК. Для получения новых сообщений используется LongPoll или Callback API.
npm install --save node-vk-bot
Не забудьте выполнить npm i
при клонировании репозитория
const { Bot, Keyboard } = require('node-vk-bot')
const bot = new Bot({
token: 'YOUR TOKEN',
group_id: 123456
}).start()
bot.get(/Hi|Hello|Hey/i, (message, exec, reply) => {
const keyboard = new Keyboard().addButton('Hi!')
const options = { forward_messages: message.id, keyboard }
reply('Hello!', options)
})
Больше примеров (как использовать вебхуки, загружать фото, ...)
если вы хотите добавить своего в этот список, просто сделайте pull request
- GitHub Events - Оповещения о новых коммитах, issues и т.д. в сообщения ВК by @vitalyavolyn
В примере выше показан бот, который лишь отвечает на приветствия
Разберем код примера c LongPoll
- Создаем бота, используя класс
Bot
. - Вызов
bot.start()
начинает получение новых сообщений. - Затем мы тестируем каждое входящее сообщение с помощью
/Hi|Hello|Hey/i
, и если сообщеине подходит, отвечаем на него.
Класс, используемый для создания ботов, принимает один аргумент: options
.
new Bot({
token: 'TOKEN',
group_id: 123456,
api: {
v: 5.80, // >= 5.80
lang: 'ru'
}
})
Параметр | Тип | Обязателен? |
---|---|---|
token | String | Да |
group_id | Number | Да |
api | Object | Нет |
controllers | String[] | Нет |
api
- объект с настройками API: version и language. (и то, и то - строки) (узнать больше)
Начинает получение новых сообщений используя LongPoll.
Бот вызывает событие update
после получения сообщений с сервера.
Примеры объектов событий.
Проверяет полученные сообщения RegExp'ом
bot.get(/Hello/i, (msg, exec, reply) => {
console.log(msg)
reply('Hi!')
})
Аргументы callback:
msg - [объект сообщения](#the-message-object)
exec - результат `pattern.exec(text)`
reply - Функция для ответа на сообщение, принимает текст сообщения и необязательные параметры message.send
Аргументы, с которыми вызывается callback - объект Message
и результат pattern.exec(text)
(где text
- текст сообщения).
То же самое, что и get, но для payload клавиатур
Это синтаксический сахар для события payload
bot.getPayload('{"command": "start"}', (msg, reply) => console.log(msg))
Аргументы: строка json и callback
Отправляет сообщение.
bot.send('text', peer_id, params)
Загружает фото.
Принимает абсолютный путь к изображению или Stream
Возвращает Promise с объектом фотографии
bot.uploadPhoto('~/kittens.png').then(photo => {
console.log(photo)
})
let stream = fs.createReadStream('./kittens.png')
bot.uploadPhoto(stream).then(photo => {
console.log(photo)
})
Доступ к VK API.
bot.api('users.get', { user_ids: 1 })
.then(res => console.log(res[0].first_name)) // Павел
При использовании метода API execute
, функция возвращает результат в том же виде, в котором о н пришел с сервера.
Функция для использования Callback API.
Пример в папке examples
Остановить проверку новых сообщений
bot.stop()
Вызывается при получении новых соообщений с LongPoll сервера
bot.on('update', update => {
if (update.from_id === 1) {
console.log('Got a message from Pavel Durov!');
}
})
Вызывется при получении голосового сообщения (возвращает объект Message
).
Вызывется при получении стикера (возвращает объект Message
).
Вызывается при получении сообщения с json payload (используется в клавиатурах)
Возвращает объект Message
и функцию reply
Вызывается при ошибке при использовании LongPoll
bot.on('poll-error', error => {
console.error('error occurred on a working with the Long Poll server ' +
`(${util.inspect(error)})`)
})
Вызывается при получении сообщения, которое не подходит ни к одному RegExp'у .get()
bot.on('command-notfound', msg => {
bot.send('What?', msg.peer_id)
})
Класс для создания клавиатуры для бота
bot.get(/Hi|Hello|Hey/i, message => {
const keyboard = new Keyboard(true)
.addButton('Red', KeyboardColor.NEGATIVE)
.addButton('Green', KeyboardColor.POSITIVE)
.addRow()
.addButton('Blue', KeyboardColor.PRIMARY)
.addButton('White')
bot.send('Hello!', message.peer_id, keyboard)
});
Единственный параметр - one_time Если True, клавиатура исчезнет после нажатия на кнопку
new Keyboard(true)
Добавить кнопку в последнюю строчку кнопок.
Parameters:
- label (string) - Текст на кнопке (required)
- color (string или KeyboardColor)
- payload (any) - Параметр для callback api
Максимальное количество кнопок на строке - 4
Добавляет новую строчку для кнопок
Максимальное количество строк - 10
Получить клавиатуру в виде JSON строки
addButton('label', KeyboardColor.NEGATIVE)
Возможные цвета кнопок:
- PRIMARY - синяя
- DEFAULT - белая
- NEGATIVE - красная
- POSITIVE - зеленая
interface Message {
id: number,
peer_id: number,
date: number,
text: string,
from_id: number,
attachments: any,
important: boolean,
conversation_message_id: number,
fwd_messages: any
}
// https://vk.com/dev/objects/message