-
-
Notifications
You must be signed in to change notification settings - Fork 36
User Long Poll API
Данный модуль по умолчанию поддерживает 3 версию
Модуль можно использовать с ключом доступа пользователя, полученным в Standalone-приложении через Implicit Flow(требуются права доступа: messages) или с ключом доступа сообщества(требуются права доступа: messages).
В начале необходимо инициализировать api:
vk := api.NewVK("<TOKEN>")
А потом сам longpoll
mode := longpoll.ReceiveAttachments + longpoll.ExtendedEvents
lp, err := longpoll.NewLongPoll(vk, mode)
// По умолчанию Wait = 25
// lp.Wait = 90
// lp.Ts = 123
В модуле реализована возможность изменять HTTP клиент - lp.Client
Пример прокси
dialer, _ := proxy.SOCKS5("tcp", "127.0.0.1:9050", nil, proxy.Direct)
httpTransport := &http.Transport{
Dial: dialer.Dial,
// DisableKeepAlives: true,
}
client := &http.Client{
Transport: httpTransport,
}
lp.Client = client
Обработчики, которые возвращают полноценные структуры:
- Для 3 версии
Для каждого события существует отдельный обработчик, который передает функции []interface{}
.
Пример для 4
события
lp.EventNew(4, func(event []interface{}) {
...
})
Если вы хотите получать полный ответ от Long Poll(например для сохранения ts
или специальной обработки failed
), можно воспользоваться следующим обработчиком.
lp.FullResponse(func(resp object.LongPollResponse) {
...
})
Полный список событий и их структуру Вы найдёте в документации
// Запуск
if err := lp.Run(); err != nil {
log.Fatal(err)
}
// Безопасное завершение
// Ждет пока соединение закроется и события обработаются
lp.Shutdown()
// Закрыть соединение
// Требует lp.Client.Transport = &http.Transport{DisableKeepAlives: true}
lp.Client.CloseIdleConnections()
package main
import (
"log"
"github.com/SevereCloud/vksdk/api"
longpoll "github.com/SevereCloud/vksdk/v2/longpoll-user"
)
func main() {
vk := api.NewVK("<TOKEN>")
lp, err := longpoll.NewLongPoll(vk, 2)
if err != nil {
log.Fatal(err)
}
lp.EventNew(4, func(event []interface{}) error {
log.Print(event[5].(string))
return nil
})
if err := lp.Run(); err != nil {
log.Fatal(err)
}
}