Beispiel #1
0
func newSlackChatClient(L *lua.LState, co *CommonClientOption, opt *lua.LTable) {
	token, ok := getStringField(L, opt, "token")
	if !ok {
		L.RaiseError("'token' is required")
	}

	slackobj := slack.New(token)
	chatClient := &slackChatClient{slackobj, nil, co, co.Logger, "", 0, make(map[string][]*lua.LFunction), make(map[string]string), make(map[string]string), make(map[string]string), make(map[string]string)}

	if co.Logger == nil {
		slack.SetLogger(log.New(os.Stdout, "", log.Lshortfile|log.LstdFlags))
	} else {
		slack.SetLogger(co.Logger)
	}

	chatClient.rtm = chatClient.slackobj.NewRTM()
	L.Push(newChatClient(L, slackChatClientTypeName, chatClient, luar.New(L, chatClient.rtm).(*lua.LUserData)))
}
Beispiel #2
0
// Connect establishes a connection to slack API
func (s *Slack) Connect(tkn string) {
	token = tkn
	API = slackApi.New(tkn)

	slackApi.SetLogger(logger)
	API.SetDebug(false)

	slackRtm = API.NewRTM()
	info, _, _ := slackRtm.StartRTM()
	s.users.AddUsers(info.Users)

	go slackRtm.ManageConnection()

	go processEvents(s)
}
Beispiel #3
0
func main() {
	api := slack.New("YOUR TOKEN HERE")
	logger := log.New(os.Stdout, "slack-bot: ", log.Lshortfile|log.LstdFlags)
	slack.SetLogger(logger)
	api.SetDebug(true)

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

Loop:
	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)
				// Replace #general with your Channel ID
				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.RTMError:
				fmt.Printf("Error: %s\n", ev.Error())

			case *slack.InvalidAuthEvent:
				fmt.Printf("Invalid credentials")
				break Loop

			default:

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