Integration with Slack API
Go Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.hooks
examples
.gitignore
LICENSE
README.md
auth.go
chan-gr-im.go
chat.go
emoji.go
file.go
message.go
reaction.go
rtm.go
slack.go
user.go

README.md

Slack

This library implements the Slack API Web and Real Time Messaging parts. A simple example utilizing most of the functionality can be seen under examples/scli which implements a full featured CLI client for Slack - either interactive or for batch usage.

##Implemented Methods

Method Description Support
api.test Checks API calling code false
auth.test Checks authentication & identity true
channels.archive Archives a channel true
channels.create Creates a channel true
channels.history Fetches history of messages and events from a channel true
channels.info Gets information about a channel true
channels.invite Invites a user to a channel true
channels.join Joins a channel, creating it if needed true
channels.kick Removes a user from a channel true
channels.leave Leaves a channel true
channels.list Lists all channels in a Slack team true
channels.mark Sets the read cursor in a channel true
channels.rename Renames a channel true
channels.setPurpose Sets the purpose for a channel true
channels.setTopic Sets the topic for a channel true
channels.unarchive Unarchives a channel true
chat.delete Deletes a message true
chat.postMessage Sends a message to a channel true
chat.update Updates a message false
emoji.list Lists custom emoji for a team true
files.delete Deletes a file true
files.info Gets information about a team file true
files.list Lists & filters team files true
files.upload Uploads or creates a file true
groups.archive Archives a private group true
groups.close Closes a private group true
groups.create Creates a private group true
groups.createChild Clones and archives a private group true
groups.history Fetches history of messages and events from a private group true
groups.info Gets information about a private group true
groups.invite Invites a user to a private group true
groups.kick Removes a user from a private group true
groups.leave Leaves a private group true
groups.list Lists private groups that the calling user has access to true
groups.mark Sets the read cursor in a private group true
groups.open Opens a private group true
groups.rename Renames a private group true
groups.setPurpose Sets the purpose for a private group true
groups.setTopic Sets the topic for a private group true
groups.unarchive Unarchives a private group true
im.close Close a direct message channel true
im.history Fetches history of messages and events from direct message channel true
im.list Lists direct message channels for the calling user true
im.mark Sets the read cursor in a direct message channel true
im.open Opens a direct message channel true
rtm.start Starts a Real Time Messaging session true
search.all Searches for messages and files matching a query false
search.files Searches for files matching a query false
search.messages Searches for messages matching a query false
stars.list Lists stars for a user false
team.accessLogs Gets the access logs for the current team false
team.info Gets information about the current team true
users.getPresence Gets user presence information false
users.info Gets information about a user true
users.list Lists all users in a Slack team true
users.setActive Marks a user as active false
users.setPresence Manually sets user presence false

##Missing Features

  • All of the above with a false in the support column.
  • Testing

##Install

If you have a go workplace setup and working you can simply do:

go get -u -t -v github.com/demisto/slack

##Usage

There are 2 ways to initiate the library, both using the various configuration functions slack.Set*:

  • Either using a test token retrieved from Slack and then setting the token
s, err = slack.New(slack.SetToken("test token retrieved from Slack"))
  • Using OAuth - see a simple example using uuid for random state. For this to work, you need to register your application with Slack.
// Start the OAuth process

// First, generate a random state
uuid, err := random.New()
if err != nil {
  panic(err)
}
conf := &oauth2.Config{
  ClientID:     "Your client ID",
  ClientSecret: "Your client secret",
  Scopes:       []string{"client"}, // the widest scope - can be others depending on requirement
  Endpoint: oauth2.Endpoint{
    AuthURL:  "https://slack.com/oauth/authorize",
    TokenURL: "https://slack.com/api/oauth.access",
  },
}
// Store state somewhere you can use later with timestamp
// ...
url := conf.AuthCodeURL(uuid.String())
// Redirect user to the OAuth Slack page
http.Redirect(w, r, url, http.StatusFound)
// Now, handle the redirected URL after the successful authentication

state := r.FormValue("state")
code := r.FormValue("code")
errStr := r.FormValue("error")
if errStr != "" {
  WriteError(w, &Error{"oauth_err", 401, "Slack OAuth Error", errStr})
  return
}
if state == "" || code == "" {
  WriteError(w, ErrBadContentRequest)
  return
}
// Retrieve the state you saved in the first step and make sure it is not too old
// ...
token, err := slack.OAuthAccess("Your client ID", "Your client secret", code, "")
if err != nil {
  WriteError(w, &Error{"oauth_err", 401, "Slack OAuth Error", err.Error()})
  return
}
// Done - you have the token - you can save it for later use
s, err := slack.New(slack.SetToken(token.AccessToken))
if err != nil {
  panic(err)
}
// Get our own user id
test, err := s.AuthTest()
if err != nil {
  panic(err)
}

##Authors

The library was written by slavikm as a side project to play with Slack API for demisto.