[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)
})