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))) }
// 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) }
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) } } } }