Skip to content
This repository has been archived by the owner on Apr 17, 2024. It is now read-only.
/ vklp Public archive

Low-level Go (Golang) vk.com longpoll client

License

Notifications You must be signed in to change notification settings

mxmCherry/vklp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vklp

Low-level Go (Golang) vk.com longpoll client

WARNING - work in progress!

Example

package main

import (
	"fmt"

	"github.com/mxmCherry/vkapi"
	"github.com/mxmCherry/vklp"
)

func main() {

	// get longpoll connection details first:

	api := vkapi.New(vkapi.Options{
		AccessToken: "YOUR_ACCESS_TOKEN",
		Version:     "5.62",
	})

	lpReq := struct {
		UseSSL  bool `json:"use_ssl,omitempty"`
		NeedPTS bool `json:"need_pts,omitempty"`
	}{
		UseSSL: true,
	}

	lpRes := new(struct {
		Server string `json:"server"`
		Key    string `json:"key"`
		TS     int64  `json:"ts"`
	})

	err := api.Exec("messages.getLongPollServer", vkapi.ToParams(lpReq), lpRes)
	if err != nil {
		panic(err.Error())
	}

	// consume updates with longpoll:

	// instantiate longpoll client:
	lp, err := vklp.New(vklp.Options{
		Server:  lpRes.Server,
		Key:     lpRes.Key,
		TS:      lpRes.TS,
		Mode:    vklp.ModeAttachments | vklp.ModeExtended | vklp.ModePTS | vklp.ModeExtra | vklp.ModeRandomID,
		Version: "1",
	})
	if err != nil {
		panic(err.Error())
	}
	defer lp.Stop()

	// process events:
	for {

		// load next event:
		if err = lp.Next(); err != nil {
			panic(err.Error())
		}

		// decode event type:
		var t uint8
		if err := lp.Decode(&t); err != nil {
			panic(err.Error())
		}

		// decode events by their types:
		switch t {

		case 4: // received new message:
			var (
				messageID uint64
				peerID    int64
				subject   string
				text      string
			)
			// [$message_id, $flags, $peer_id, $timestamp, $subject, $text, $attachments, $random_id]
			if err = lp.Decode(&messageID, vklp.Skip, &peerID, vklp.Skip, &subject, &text); err != nil {
				panic(err.Error())
			}
			fmt.Printf("received new message %d from %d: %s - %s\n", messageID, peerID, subject, text)

		default: // drop unused events:
			fmt.Printf("dropped unused event %d\n", t)
		}

	} // end for
} // end main

About

Low-level Go (Golang) vk.com longpoll client

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages