forked from jshiffer/matterbridge
124 lines
2.7 KiB
Go
124 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
|
|
"github.com/nlopes/slack"
|
|
)
|
|
|
|
/*
|
|
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
|
|
}
|
|
|
|
}
|