vklongpoll

package module
v0.2.1-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 25, 2022 License: MIT Imports: 13 Imported by: 0

README

VK LongPoll

Данный модуль предназначен для настройки соединения Long Poll с VK. Внутри происходит только базовая поддержка соединения и парсинг только общих полей - ts, key, failed, pts

Модуль возвращает события списком из байтов []byte для дальнейшего самостоятельного парсинга структур. Внутри используется модуль vkapiexecutor для отправки запроса к VK API на получение URL сервера.

  • Модуль создает универсальное подключение Long Poll, есть поддержка как для сообществ, так и для пользовательского Long Poll.
  • Есть возможность изменять http.Client для настройки своих собственных заголовков, а также для настройки прокси или кастомного сжатия.
  • Есть возможность получить поле pts для обработки событий вручную.
  • Есть возможность установить собственный способ обновления информации о сервере. Может понадобиться для настройки Long Poll соединения другими способами (у ВК их несколько)
Зачем этот модуль?

Модуль был сделан для создания универсального легкого VK Long Poll соединения. Он не предназначен для написания чат-ботов или чего-то еще такого, хотя и дает возможность слушать события пользователя или сообщества. Любые более сложные компоненты нужно будет писать дополнительно, поверх модуля.

В модуле используются возможности стандартной библиотеки Go (context, url, strings и т.д), а также пакет jsonparser для более быстрого парсинга заранее известных полей json

Установка

go get github.com/ciricc/vklongpoll

Пример

package main

import (
	"context"
	"log"
	"time"

	"github.com/ciricc/vkapiexecutor/executor"
	"github.com/ciricc/vkapiexecutor/request"
	"github.com/ciricc/vklongpoll"
)

func main() {
	exec := executor.New()

	getServerRequest := request.New()

	getServerRequest.GetParams().AccessToken("BOT_TOKEN")
	getServerRequest.GetParams().Set("group_id", "group")

	getServerRequest.Method("groups.getLongPollServer")

	lp := vklongpoll.New()

	ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
	defer cancel()

	serverUpdater := vklongpoll.WithServerUpdater(
		vklongpoll.UniversalServerUpdater(getServerRequest, exec),
	)

	for {
		select {
		case <-ctx.Done():
			log.Println("Longpoll timed out!")
			return
		default:
			updates, err := lp.Recv(ctx, serverUpdater)
			if err != nil {
				log.Println("get updates error", err)
			} else {
				log.Println("updates", updates)
				log.Println("ts", lp.Ts)
			}
		}
	}
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultUpdatesJsonPath = []string{"updates"}

Путь параметра, где в ответе сервера хранятся обновления

View Source
var DefaultVersion = 3

Версия Long Poll по умолчанию

View Source
var DefaultWait = 90 * time.Second

Длительность запроса по умолчанию

Functions

This section is empty.

Types

type Mode

type Mode int

Режим работы

const Attachments Mode = 2

Получать вложения

const Extended Mode = 8

Возвращать расширенный набор событий

const ExtraFields Mode = 64

Возвращать поля $extra

const ReturnPts Mode = 32

Возвращать поле pts для дальнейшей работы

const ReturnRandomId Mode = 128

Возвращать поле random_id

var DefaultMode Mode = 0

Режим работы по умолчанию

func SumModes

func SumModes(modes ...Mode) Mode

Суммирует режимы работы

type ParamsMerger

type ParamsMerger func(u url.Values)

type Pts

type Pts int64

type ServerCredentials

type ServerCredentials struct {
	Ts        int64    // Новое значение TS
	ServerURL *url.URL // Новый URL сервера
	Key       string   // Новый ключ
}

type ServerUpdater

type ServerUpdater func(ctx context.Context) (*ServerCredentials, error)

func UniversalServerUpdater

func UniversalServerUpdater(req *request.Request, exec *executor.Executor) ServerUpdater

Универсальный модуль для обновления сервера Подходит для Long Poll сообществ, а также для LongPoll пользователя Обработчик использует executor, в нем он выполняет указанный запрос req Урпавление токенами, сессиями и параметарми запроса происходит уже на уровне создания запроса вами

type Update

type Update []byte

type VkLongPoll

type VkLongPoll struct {
	HttpClient *http.Client

	Ts int64
	// contains filtered or unexported fields
}

func New

func New() *VkLongPoll

Создает инстанс лонгполла Принимает executor - структура для отправки запросов к VK API

func (*VkLongPoll) Pts

func (v *VkLongPoll) Pts() *Pts

Возвращает последнее полученное значение pts

func (*VkLongPoll) Recv

func (v *VkLongPoll) Recv(ctx context.Context, opts ...VkLongPollOption) ([]Update, error)

Делает запрос на получение списка новых событий Возвращает список событий в [][]byte, а также значение поля pts, если оно есть в ответе Автоматически переподключается в случае ошибки

Чтение событий только синхронное, чтобы иметь всегда определенный ts (последний) Если есть задача читать события одновременно на один и тот же источник - лучше всего создать новое поделючение Long Poll

func (*VkLongPoll) RecvOpt

func (v *VkLongPoll) RecvOpt(ctx context.Context, opt *VkLongPollOptions) ([]Update, error)

То же самое, что Recv, но опции - ссылка на структуру

type VkLongPollOption

type VkLongPollOption func(v *VkLongPollOptions)

func WithMode

func WithMode(mode Mode) VkLongPollOption

Устанавливает режим работы в натсройки подключения

func WithModeSum

func WithModeSum(modes ...Mode) VkLongPollOption

Находит сумму всех указанных режимов и устанавливает в настройки подключения

func WithParamsMerger

func WithParamsMerger(merger ParamsMerger) VkLongPollOption

Устанавливает кастомные параметры в запрос к Long Poll серверу (перезаписывает уже установленные, вроде ts, mode, wait и т.д)

func WithServerUpdater

func WithServerUpdater(updater ServerUpdater) VkLongPollOption

Устанавливает обработчик для обновления информации о Long Poll соединении Здесь, например, вы можете делать запрос на messages.getLongPollServer и получить значение ts, key и т.д Если у вас нет цели писать собственный обработчик, то используйте UniversalServerUpdater

func WithUpdatesJsonPath

func WithUpdatesJsonPath(path ...string) VkLongPollOption

Устанавливает путь параметра updates в JSON схеме

func WithVersion

func WithVersion(version int) VkLongPollOption

Устанавливает версию Long Poll (2, 3, 4, 5)

func WithWait

func WithWait(wait time.Duration) VkLongPollOption

Устанавливает длительность одного запроса

type VkLongPollOptions

type VkLongPollOptions struct {
	Wait            time.Duration
	ServerUpdater   ServerUpdater
	Mode            Mode
	Version         int
	ParamsMerger    ParamsMerger
	UpdatesJsonPath []string
}

func BuildOptions

func BuildOptions(opts ...VkLongPollOption) *VkLongPollOptions

Суммирует все функциональные опции и возвращает структуру опций

func NewOptions

func NewOptions() *VkLongPollOptions

Создает опции по умолчанию

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL