Go lang lib for ICQ BOT API
Find a file
Alexander Kiryukhin 11849c8c18
+ Long polling to get events
+ ParseCommand sugar
2018-12-22 19:53:28 +03:00
example + Long polling to get events 2018-12-22 19:53:28 +03:00
.gitignore * SendMessage 2018-09-16 02:36:04 +03:00
api.go + Long polling to get events 2018-12-22 19:53:28 +03:00
events.go + Long polling to get events 2018-12-22 19:53:28 +03:00
fetchEvents.go + Long polling to get events 2018-12-22 19:53:28 +03:00
go.mod * SendMessage 2018-09-16 02:36:04 +03:00
LICENSE Initial commit 2018-07-02 13:40:09 +03:00
README.md + Long polling to get events 2018-12-22 19:53:28 +03:00
sendMessage.go + Long polling to get events 2018-12-22 19:53:28 +03:00
types.go + Long polling to get events 2018-12-22 19:53:28 +03:00
uploadFile.go + Long polling to get events 2018-12-22 19:53:28 +03:00
utils.go + Long polling to get events 2018-12-22 19:53:28 +03:00
webhookHandler.go + Long polling to get events 2018-12-22 19:53:28 +03:00

ICQ Bot API

Installation

Go get: go get gopkg.in/icq.v2

Go mod / Go dep: import "gopkg.in/icq.v2"

Working

Methods:

  • SendMessage
  • UploadFile
  • FetchEvents

Webhooks workds but not recommends

Example

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"os/signal"

	"gopkg.in/icq.v2"
)

func main() {
	// New API object
	b := icq.NewAPI(os.Getenv("ICQ_TOKEN"))

	ctx, cancel := context.WithCancel(context.Background())

	ch := make(chan interface{}) // Events channel
	osSignal := make(chan os.Signal, 1)
	signal.Notify(osSignal, os.Interrupt)
	signal.Notify(osSignal, os.Kill)

	go b.FetchEvents(ctx, ch) // Events fetch loop

	for {
		select {
		case e := <-ch:
			handleEvent(b, e)
		case <-osSignal:
			cancel()
			break
		}
	}
}

func handleEvent(b *icq.API, event interface{}) {
	switch event.(type) {
	case *icq.IMEvent:
		message := event.(*icq.IMEvent)
		if err := handleMessage(b, message); err != nil {
			b.SendMessage(icq.Message{
				To:   message.Data.Source.AimID,
				Text: "Message process fail",
			})
		}
	default:
		log.Printf("%#v", event)
	}
}

func handleMessage(b *icq.API, message *icq.IMEvent) error {
	cmd, ok := icq.ParseCommand(message)
	if !ok {
		return nil
	}
	_, err := b.SendMessage(icq.Message{
		To:   cmd.From,
		Text: fmt.Sprintf("Command: %s, Arguments: %v", cmd.Command, cmd.Arguments),
	})
	return err
}