// RunSlack connects to slack RTM API using the provided token func RunSlack(token string) { api := slack.New(token) conn := new(slackConnection) conn.rtm = api.NewRTM() go conn.rtm.ManageConnection() Loop: for { select { case msg := <-conn.rtm.IncomingEvents: switch ev := msg.Data.(type) { case *slack.MessageEvent: messageReceived(ev.Channel, ev.Text, ev.User, conn) case *slack.RTMError: fmt.Printf("Error: %s\n", ev.Error()) case *slack.InvalidAuthEvent: fmt.Printf("Invalid credentials") break Loop } } } }
func main() { api := slack.New("YOUR_TOKEN_HERE") user, err := api.GetUserInfo("U023BECGF") if err != nil { fmt.Printf("%s\n", err) return } fmt.Printf("ID: %s, Fullname: %s, Email: %s\n", user.ID, user.Profile.RealName, user.Profile.Email) }
func main() { api := slack.New("YOUR_TOKEN_HERE") // If you set debugging, it will log all requests to the console // Useful when encountering issues // api.SetDebug(true) groups, err := api.GetGroups(false) if err != nil { fmt.Printf("%s\n", err) return } for _, group := range groups { fmt.Printf("ID: %s, Name: %s\n", group.ID, group.Name) } }
func main() { api := slack.New("YOUR TOKEN HERE") 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) } } } }
func main() { api := slack.New("YOUR_TOKEN_HERE") params := slack.FileUploadParameters{ Title: "Batman Example", //Filetype: "txt", File: "example.txt", //Content: "Nan Nan Nan Nan Nan Nan Nan Nan Batman", } file, err := api.UploadFile(params) if err != nil { fmt.Printf("%s\n", err) return } fmt.Printf("Name: %s, URL: %s\n", file.Name, file.URL) err = api.DeleteFile(file.ID) if err != nil { fmt.Printf("%s\n", err) return } fmt.Printf("File %s deleted successfully.\n", file.Name) }
func main() { var ( apiToken string debug bool ) flag.StringVar(&apiToken, "token", "YOUR_TOKEN_HERE", "Your Slack API Token") flag.BoolVar(&debug, "debug", false, "Show JSON output") flag.Parse() api := slack.New(apiToken) if debug { api.SetDebug(true) } // Get all stars for the usr. params := slack.NewStarsParameters() starredItems, _, err := api.GetStarred(params) if err != nil { fmt.Printf("Error getting stars: %s\n", err) return } for _, s := range starredItems { var desc string switch s.Type { case slack.TYPE_MESSAGE: desc = s.Message.Text case slack.TYPE_FILE: desc = s.File.Name case slack.TYPE_FILE_COMMENT: desc = s.File.Name + " - " + s.Comment.Comment case slack.TYPE_CHANNEL, slack.TYPE_IM, slack.TYPE_GROUP: desc = s.Channel } fmt.Printf("Starred %s: %s\n", s.Type, desc) } }
func main() { api := slack.New("YOUR_TOKEN_HERE") params := slack.PostMessageParameters{} attachment := slack.Attachment{ Pretext: "some pretext", Text: "some text", // Uncomment the following part to send a field too /* Fields: []slack.AttachmentField{ slack.AttachmentField{ Title: "a", Value: "no", }, }, */ } params.Attachments = []slack.Attachment{attachment} channelID, timestamp, err := api.PostMessage("CHANNEL_ID", "Some text", params) if err != nil { fmt.Printf("%s\n", err) return } fmt.Printf("Message successfully sent to channel %s at %s", channelID, timestamp) }
func main() { var ( apiToken string debug bool ) flag.StringVar(&apiToken, "token", "YOUR_TOKEN_HERE", "Your Slack API Token") flag.BoolVar(&debug, "debug", false, "Show JSON output") flag.Parse() api := slack.New(apiToken) if debug { api.SetDebug(true) } var ( postAsUserName string postAsUserID string postToUserName string postToUserID string postToChannelID string ) // Find the user to post as. authTest, err := api.AuthTest() if err != nil { fmt.Printf("Error getting channels: %s\n", err) return } // Post as the authenticated user. postAsUserName = authTest.User postAsUserID = authTest.UserID // Posting to DM with self causes a conversation with slackbot. postToUserName = authTest.User postToUserID = authTest.UserID // Find the channel. _, _, chanID, err := api.OpenIMChannel(postToUserID) if err != nil { fmt.Printf("Error opening IM: %s\n", err) return } postToChannelID = chanID fmt.Printf("Posting as %s (%s) in DM with %s (%s), channel %s\n", postAsUserName, postAsUserID, postToUserName, postToUserID, postToChannelID) // Post a message. postParams := slack.PostMessageParameters{} channelID, timestamp, err := api.PostMessage(postToChannelID, "Is this any good?", postParams) if err != nil { fmt.Printf("Error posting message: %s\n", err) return } // Grab a reference to the message. msgRef := slack.NewRefToMessage(channelID, timestamp) // React with :+1: if err := api.AddReaction("+1", msgRef); err != nil { fmt.Printf("Error adding reaction: %s\n", err) return } // React with :-1: if err := api.AddReaction("cry", msgRef); err != nil { fmt.Printf("Error adding reaction: %s\n", err) return } // Get all reactions on the message. msgReactions, err := api.GetReactions(msgRef, slack.NewGetReactionsParameters()) if err != nil { fmt.Printf("Error getting reactions: %s\n", err) return } fmt.Printf("\n") fmt.Printf("%d reactions to message...\n", len(msgReactions)) for _, r := range msgReactions { fmt.Printf(" %d users say %s\n", r.Count, r.Name) } // List all of the users reactions. listReactions, _, err := api.ListReactions(slack.NewListReactionsParameters()) if err != nil { fmt.Printf("Error listing reactions: %s\n", err) return } fmt.Printf("\n") fmt.Printf("All reactions by %s...\n", authTest.User) for _, item := range listReactions { fmt.Printf("%d on a %s...\n", len(item.Reactions), item.Type) for _, r := range item.Reactions { fmt.Printf(" %s (along with %d others)\n", r.Name, r.Count-1) } } // Remove the :cry: reaction. err = api.RemoveReaction("cry", msgRef) if err != nil { fmt.Printf("Error remove reaction: %s\n", err) return } // Get all reactions on the message. msgReactions, err = api.GetReactions(msgRef, slack.NewGetReactionsParameters()) if err != nil { fmt.Printf("Error getting reactions: %s\n", err) return } fmt.Printf("\n") fmt.Printf("%d reactions to message after removing cry...\n", len(msgReactions)) for _, r := range msgReactions { fmt.Printf(" %d users say %s\n", r.Count, r.Name) } }
/* WARNING: This example is destructive in the sense that it create a channel called testpinning */ func main() { var ( apiToken string debug bool ) flag.StringVar(&apiToken, "token", "YOUR_TOKEN_HERE", "Your Slack API Token") flag.BoolVar(&debug, "debug", false, "Show JSON output") flag.Parse() api := slack.New(apiToken) if debug { api.SetDebug(true) } var ( postAsUserName string postAsUserID string postToChannelID string ) // Find the user to post as. authTest, err := api.AuthTest() if err != nil { fmt.Printf("Error getting channels: %s\n", err) return } channelName := "testpinning" // Post as the authenticated user. postAsUserName = authTest.User postAsUserID = authTest.UserID // Create a temporary channel channel, err := api.CreateChannel(channelName) if err != nil { // If the channel exists, that means we just need to unarchive it if err.Error() == "name_taken" { err = nil channels, err := api.GetChannels(false) if err != nil { fmt.Println("Could not retrieve channels") return } for _, archivedChannel := range channels { if archivedChannel.Name == channelName { if archivedChannel.IsArchived { err = api.UnarchiveChannel(archivedChannel.ID) if err != nil { fmt.Printf("Could not unarchive %s: %s\n", archivedChannel.ID, err) return } } channel = &archivedChannel break } } } if err != nil { fmt.Printf("Error setting test channel for pinning: %s\n", err) return } } postToChannelID = channel.ID fmt.Printf("Posting as %s (%s) in channel %s\n", postAsUserName, postAsUserID, postToChannelID) // Post a message. postParams := slack.PostMessageParameters{} channelID, timestamp, err := api.PostMessage(postToChannelID, "Is this any good?", postParams) if err != nil { fmt.Printf("Error posting message: %s\n", err) return } // Grab a reference to the message. msgRef := slack.NewRefToMessage(channelID, timestamp) // Add message pin to channel if err := api.AddPin(channelID, msgRef); err != nil { fmt.Printf("Error adding pin: %s\n", err) return } // List all of the users pins. listPins, _, err := api.ListPins(channelID) if err != nil { fmt.Printf("Error listing pins: %s\n", err) return } fmt.Printf("\n") fmt.Printf("All pins by %s...\n", authTest.User) for _, item := range listPins { fmt.Printf(" > Item type: %s\n", item.Type) } // Remove the pin. err = api.RemovePin(channelID, msgRef) if err != nil { fmt.Printf("Error remove pin: %s\n", err) return } if err = api.ArchiveChannel(channelID); err != nil { fmt.Printf("Error archiving channel: %s\n", err) return } }