[User] LongPoll API Редактировано: 28.08.2020 в 04:16

LongPoll API позволяет прослушивать события аккаунта, вроде сообщения или, вступления в группу. LongPoll API с недавних пор разделяют на две части - User LongPoll API, и Bots LongPoll API, в EasyVK поддерживаются оба типа.


Чтобы прослушивать события пользователя - просто используйте свойство longpoll у объекта EasyVK, после анициализации easyvk.
easyvk(/*данные для авторизации*/).then(vk => {

  vk.longpoll.connect().then(({connection, vk: EasyVK}) => {
    connection.on('message', console.log)
    console.log(EasyVK === vk) //true        
  })

})

longpoll.connect([settings])

Этот метод создает подключение в серверу LongPoll и начинает прослушивать, в штатном режиме этот метод просто подключается к серверу и возвращает в функцию resolve объект такого вида

{
  vk: EasyVK,
  connection: LongPollConnection
}
  

В более расширенном использовании этого метода можно натроить его как вам нужно. На пример, вы можете внести параметры, которые нужны вам на определенных этапах подклюения к LongPoll, для этого передайте в вызов метода объект с такими свойствами:

const lpSettings = {
  forGetLongPollServer: {
    lp_version: "3", //Изменяем версию LongPoll, в EasyVK используется версия 2
    need_pts: "1"
  }, 
  forLongPollServer: {
    wait: "15" //Ждем ответа 15 секунд
  }
}
vk.longpoll.connect(lpSettings).then(({connection}) => {

  console.log(connection.config)

}).catch(console.error)

forGetLongPollServer - это параметры для запроса на метод messages.getLongPollServer, вы можете их добавлять и изменять.

forLongPollServer - это параметры для каждого запроса к серверу, то есть каждый раз, когда ваш сервер будет запрашивать данные, он будет отправлять эти параметры. Подробнее о них тут

connection.addEventCodeListener(eventCode, handler)

Так как в User LongPoll все названия событий - это их дентификаторы, то в EasyVK не было смысла прописывать для каждого из них строчное именование, поэтому эту возможность я оставил вам, хоть и не для всех событий, и некоторые события, основные, скажем так, я проименовал.

connection.addEventCodeListener(3, (event) => { 

  // Сброс флагов сообщения, например: прочитано
  console.log(event)

})

Теперь каждый раз, когда кто-то будет, например, читать непрочитанное сообщение, будет вызываться handler

connection.debug()

Этот метод подрубает вашу функцию дебагер, в которую каждый раз, когда происходит какое-то событие, будет передаваться ответ сервера, или что-то еще.

function longPollDebugger({type, data}) {
  console.log(`[typeLog ${type}]`, data);
}

vk.longpoll.connect()
.then(({connection}) => {
  connection.debug(longPollDebugger)
})

connection.close()

Данный метод закрывает соединение, не то, чтобы соединение, а скорее, он просто прекращает делать длительные запросы.

connection.close().then(() => {
  console.log('[Closed] LongPoll connection...')   
})

События

В User LongPoll API все события - это по сути числа, их идентификаторы, поэтому в EasyVK поддерживаются лишь определенные события, поддержка остальных событий производится через метод connection.addEventCodeListener()

ID события Событие Описание
4 message Пользователь отправил сообщение, либо ему отправили сообщение
8 friendOnline Друг стал онлайн
51 editChat В беседе произошли изменения, например, название сменил Антон
61 typeInDialog Человек пишет в диалоге с пользователем
62 typeInChat Кто-то пишет в беседе
- error Возникла ошибка в подключении
- reconnectError Возникла какая-то ошибка при попытки переподключиться, когда какие-то параметры сервера изменяются
- failure Возникает, когда подключение разрывается, или, сервер слишком долго не отвечает
- close Возникает, когда подключение закрывается по принуждению
vk.longpoll.connect()
.then(({connetion}) => {

  connection.on('error', console.error)
  .on('failure', console.error)
  .on('reconnectError', console.error)

  connection.on('messsage', console.log)

})