Skip to content
This repository has been archived by the owner on Aug 7, 2019. It is now read-only.

Latest commit

 

History

History
317 lines (241 loc) · 9.51 KB

README_ru.md

File metadata and controls

317 lines (241 loc) · 9.51 KB

Build Status

Боты ВКонтакте

Библиотека для создания чат-ботов ВК. Для получения новых сообщений используется 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

  1. Создаем бота, используя класс Bot.
  2. Вызов bot.start() начинает получение новых сообщений.
  3. Затем мы тестируем каждое входящее сообщение с помощью /Hi|Hello|Hey/i, и если сообщеине подходит, отвечаем на него.

Bot

Класс, используемый для создания ботов, принимает один аргумент: 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. (и то, и то - строки) (узнать больше)


Методы

start

Начинает получение новых сообщений используя LongPoll. Бот вызывает событие update после получения сообщений с сервера. Примеры объектов событий.


get

Проверяет полученные сообщения 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 - текст сообщения).


getPayload

То же самое, что и get, но для payload клавиатур

Это синтаксический сахар для события payload

bot.getPayload('{"command": "start"}', (msg, reply) => console.log(msg))

Аргументы: строка json и callback


send

Отправляет сообщение.

bot.send('text', peer_id, params)

uploadPhoto

Загружает фото.

Принимает абсолютный путь к изображению или 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)
})

api

Доступ к VK API.

bot.api('users.get', { user_ids: 1 })
  .then(res => console.log(res[0].first_name)) // Павел

При использовании метода API execute, функция возвращает результат в том же виде, в котором о н пришел с сервера.


processUpdate

Функция для использования Callback API. Пример в папке examples


stop

Остановить проверку новых сообщений

bot.stop()

События

update

Вызывается при получении новых соообщений с LongPoll сервера

bot.on('update', update => {
  if (update.from_id === 1) {
    console.log('Got a message from Pavel Durov!');
  }
})

voice

Вызывется при получении голосового сообщения (возвращает объект Message).


sticker

Вызывется при получении стикера (возвращает объект Message).


payload

Вызывается при получении сообщения с json payload (используется в клавиатурах) Возвращает объект Message и функцию reply


poll-error

Вызывается при ошибке при использовании LongPoll

bot.on('poll-error', error => {
  console.error('error occurred on a working with the Long Poll server ' +
    `(${util.inspect(error)})`)
})

command-notfound

Вызывается при получении сообщения, которое не подходит ни к одному RegExp'у .get()

bot.on('command-notfound', msg => {
  bot.send('What?', msg.peer_id)
})

Keyboard

Класс для создания клавиатуры для бота

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)

addButton

Добавить кнопку в последнюю строчку кнопок.

Parameters:

  • label (string) - Текст на кнопке (required)
  • color (string или KeyboardColor)
  • payload (any) - Параметр для callback api

Максимальное количество кнопок на строке - 4


addRow

Добавляет новую строчку для кнопок

Максимальное количество строк - 10


toString

Получить клавиатуру в виде JSON строки


KeyboardColor

addButton('label', KeyboardColor.NEGATIVE)

Возможные цвета кнопок:

  • PRIMARY - синяя
  • DEFAULT - белая
  • NEGATIVE - красная
  • POSITIVE - зеленая

Объект Message

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