Codebase list golang-github-nlopes-slack / 16288f9 examples / websocket / websocket.go
16288f9

Tree @16288f9 (Download .tar.gz)

websocket.go @16288f9raw · history · blame

package main

import (
	"fmt"

	"github.com/abourget/slack"
)

func main() {
	chSender := make(chan slack.OutgoingMessage)

	api := slack.New("YOUR TOKEN HERE")
	api.SetDebug(true)

	rtm := api.NewRTM()
	go rtm.ManageConnection()

	go func(rtm *slack.RTM, chSender chan slack.OutgoingMessage) {
		for {
			select {
			case msg := <-chSender:
				rtm.SendMessage(&msg)
			}
		}
	}(rtm, chSender)

	for {
		select {
		case msg := <-rtm.IncomingEvents:
			fmt.Print("Event Received: ")
			switch ev := msg.Data.(type) {
			case *slack.HelloEvent:
				// Ignore hello

			case *slack.ConnectedEvent:
				fmt.Println("Infos:", ev.Info)
				fmt.Println("Connection counter:", ev.ConnectionCount)
				rtm.SendMessage(rtm.NewOutgoingMessage("Hello world", "#general"))

			case *slack.MessageEvent:
				fmt.Printf("Message: %v\n", ev)

			case *slack.PresenceChangeEvent:
				fmt.Printf("Presence Change: %v\n", ev)

			case *slack.LatencyReport:
				fmt.Printf("Current latency: %v\n", ev.Value)

			case *slack.SlackWSError:
				fmt.Printf("Error: %d - %s\n", ev.Code, ev.Msg)

			default:
				// Ignore other events..
				//fmt.Printf("Unexpected: %v\n", msg.Data)
			}
		}
	}
}