package module
Version: v0.1.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2017 License: BSD-2-Clause Imports: 23 Imported by: 667


Slack API in Go GoDoc Build Status

This library supports most if not all of the REST calls, as well as the Real-Time Messaging protocol over websocket, in a fully managed way.

Change log

v0.1.0 - May 28, 2017

This is released before adding context support. As the used context package is the one from Go 1.7 this will be the last compatible with Go < 1.7.

Please check 0.1.0

As of this version a is available. Please visit it for updates.


go get
$ go get -u


Getting all groups
import (


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)
	for _, group := range groups {
		fmt.Printf("ID: %s, Name: %s\n", group.ID, group.Name)
Getting User Information
import (


func main() {
    api := slack.New("YOUR_TOKEN_HERE")
    user, err := api.GetUserInfo("U023BECGF")
    if err != nil {
	    fmt.Printf("%s\n", err)
    fmt.Printf("ID: %s, Fullname: %s, Email: %s\n", user.ID, user.Profile.RealName, user.Profile.Email)

Minimal RTM usage:



You are more than welcome to contribute to this project. Fork and make a Pull Request, or create an Issue if you see any problem.


BSD 2 Clause license




View Source
const (
	DEFAULT_MESSAGE_ASUSER           = false
	DEFAULT_MESSAGE_PARSE            = ""
View Source
const (
	// Add here the defaults in the siten
View Source
const (
View Source
const (
	TYPE_MESSAGE      = "message"
	TYPE_FILE         = "file"
	TYPE_FILE_COMMENT = "file_comment"
	TYPE_CHANNEL      = "channel"
	TYPE_IM           = "im"
	TYPE_GROUP        = "group"
View Source
const (
View Source
const (
	DEFAULT_SEARCH_SORT      = "score"
View Source
const (
View Source
const (
View Source
const (
View Source
const (
	// MaxMessageTextLength is the current maximum message length in number of characters as defined here
	MaxMessageTextLength = 4000


View Source
var HTTPClient = &http.Client{}

HTTPClient sets a custom http.Client deprecated: in favor of SetHTTPClient()

View Source
var SLACK_API string = ""

Added as a var so that we can change this for testing purposes

View Source
var SLACK_WEB_API_FORMAT string = ""


func ApplyMsgOptions added in v0.1.0

func ApplyMsgOptions(token, channel string, options ...MsgOption) (string, url.Values, error)

ApplyMsgOptions utility function for debugging/testing chat requests.

func GetOAuthToken

func GetOAuthToken(clientID, clientSecret, code, redirectURI string, debug bool) (accessToken string, scope string, err error)

GetOAuthToken retrieves an AccessToken

func SetHTTPClient added in v0.1.0

func SetHTTPClient(client HTTPRequester)

SetHTTPClient allows you to specify a custom http.Client Use this instead of the package level HTTPClient variable if you want to use a custom client like the Stackdriver Trace HTTPClient

func SetLogger added in v0.1.0

func SetLogger(l *log.Logger)

SetLogger let's library users supply a logger, so that api debugging can be logged along with the application's debugging info.


type AccessLogParameters added in v0.1.0

type AccessLogParameters struct {
	Count int
	Page  int

AccessLogParameters contains all the parameters necessary (including the optional ones) for a GetAccessLogs() request

func NewAccessLogParameters added in v0.1.0

func NewAccessLogParameters() AccessLogParameters

NewAccessLogParameters provides an instance of AccessLogParameters with all the sane default values set

type AccountsChangedEvent

type AccountsChangedEvent struct {
	Type string `json:"type"`

AccountsChangedEvent represents the accounts changed event

type AckErrorEvent added in v0.1.0

type AckErrorEvent struct {
	ErrorObj error

AckErrorEvent i

func (*AckErrorEvent) Error added in v0.1.0

func (a *AckErrorEvent) Error() string

type AckMessage

type AckMessage struct {
	ReplyTo   int    `json:"reply_to"`
	Timestamp string `json:"ts"`
	Text      string `json:"text"`

AckMessage is used for messages received in reply to other messages

type Attachment

type Attachment struct {
	Color    string `json:"color,omitempty"`
	Fallback string `json:"fallback"`

	CallbackID string `json:"callback_id,omitempty"`

	AuthorName    string `json:"author_name,omitempty"`
	AuthorSubname string `json:"author_subname,omitempty"`
	AuthorLink    string `json:"author_link,omitempty"`
	AuthorIcon    string `json:"author_icon,omitempty"`

	Title     string `json:"title,omitempty"`
	TitleLink string `json:"title_link,omitempty"`
	Pretext   string `json:"pretext,omitempty"`
	Text      string `json:"text"`

	ImageURL string `json:"image_url,omitempty"`
	ThumbURL string `json:"thumb_url,omitempty"`

	Fields     []AttachmentField  `json:"fields,omitempty"`
	Actions    []AttachmentAction `json:"actions,omitempty"`
	MarkdownIn []string           `json:"mrkdwn_in,omitempty"`

	Footer     string `json:"footer,omitempty"`
	FooterIcon string `json:"footer_icon,omitempty"`

	Ts json.Number `json:"ts,omitempty"`

Attachment contains all the information for an attachment

type AttachmentAction added in v0.1.0

type AttachmentAction struct {
	Name            string                        `json:"name"`                       // Required.
	Text            string                        `json:"text"`                       // Required.
	Style           string                        `json:"style,omitempty"`            // Optional. Allowed values: "default", "primary", "danger".
	Type            string                        `json:"type"`                       // Required. Must be set to "button" or "select".
	Value           string                        `json:"value,omitempty"`            // Optional.
	DataSource      string                        `json:"data_source,omitempty"`      // Optional.
	MinQueryLength  int                           `json:"min_query_length,omitempty"` // Optional. Default value is 1.
	Options         []AttachmentActionOption      `json:"options,omitempty"`          // Optional. Maximum of 100 options can be provided in each menu.
	SelectedOptions []AttachmentActionOption      `json:"selected_options,omitempty"` // Optional. The first element of this array will be set as the pre-selected option for this menu.
	OptionGroups    []AttachmentActionOptionGroup `json:"option_groups,omitempty"`    // Optional.
	Confirm         *ConfirmationField            `json:"confirm,omitempty"`          // Optional.

AttachmentAction is a button or menu to be included in the attachment. Required when using message buttons or menus and otherwise not useful. A maximum of 5 actions may be provided per attachment.

type AttachmentActionCallback added in v0.1.0

type AttachmentActionCallback struct {
	Actions    []AttachmentAction `json:"actions"`
	CallbackID string             `json:"callback_id"`
	Team       Team               `json:"team"`
	Channel    Channel            `json:"channel"`
	User       User               `json:"user"`

	OriginalMessage Message `json:"original_message"`

	ActionTs     string `json:"action_ts"`
	MessageTs    string `json:"message_ts"`
	AttachmentID string `json:"attachment_id"`
	Token        string `json:"token"`
	ResponseURL  string `json:"response_url"`

AttachmentActionCallback is sent from Slack when a user clicks a button in an interactive message (aka AttachmentAction)

type AttachmentActionOption added in v0.1.0

type AttachmentActionOption struct {
	Text        string `json:"text"`                  // Required.
	Value       string `json:"value"`                 // Required.
	Description string `json:"description,omitempty"` // Optional. Up to 30 characters.

AttachmentActionOption the individual option to appear in action menu.

type AttachmentActionOptionGroup added in v0.1.0

type AttachmentActionOptionGroup struct {
	Text    string                   `json:"text"`    // Required.
	Options []AttachmentActionOption `json:"options"` // Required.

AttachmentActionOptionGroup is a semi-hierarchal way to list available options to appear in action menu.

type AttachmentField

type AttachmentField struct {
	Title string `json:"title"`
	Value string `json:"value"`
	Short bool   `json:"short"`

AttachmentField contains information for an attachment field An Attachment can contain multiple of these

type AuthTestResponse

type AuthTestResponse struct {
	URL    string `json:"url"`
	Team   string `json:"team"`
	User   string `json:"user"`
	TeamID string `json:"team_id"`
	UserID string `json:"user_id"`

type BillableInfoResponse added in v0.1.0

type BillableInfoResponse struct {
	BillableInfo map[string]BillingActive `json:"billable_info"`

type BillingActive added in v0.1.0

type BillingActive struct {
	BillingActive bool `json:"billing_active"`

type Bot

type Bot struct {
	ID      string `json:"id"`
	Name    string `json:"name"`
	Deleted bool   `json:"deleted"`
	Icons   Icons  `json:"icons"`

Bot contains information about a bot

type BotAddedEvent

type BotAddedEvent struct {
	Type string `json:"type"`
	Bot  Bot    `json:"bot"`

BotAddedEvent represents the bot added event

type BotChangedEvent

type BotChangedEvent struct {
	Type string `json:"type"`
	Bot  Bot    `json:"bot"`

BotChangedEvent represents the bot changed event

type Channel

type Channel struct {
	IsChannel bool `json:"is_channel"`
	IsGeneral bool `json:"is_general"`
	IsMember  bool `json:"is_member"`
	// contains filtered or unexported fields

Channel contains information about the channel

type ChannelArchiveEvent

type ChannelArchiveEvent ChannelInfoEvent

ChannelArchiveEvent represents the Channel archive event

type ChannelCreatedEvent

type ChannelCreatedEvent struct {
	Type           string             `json:"type"`
	Channel        ChannelCreatedInfo `json:"channel"`
	EventTimestamp string             `json:"event_ts"`

ChannelCreatedEvent represents the Channel created event

type ChannelCreatedInfo

type ChannelCreatedInfo struct {
	ID        string `json:"id"`
	IsChannel bool   `json:"is_channel"`
	Name      string `json:"name"`
	Created   int    `json:"created"`
	Creator   string `json:"creator"`

ChannelCreatedInfo represents the information associated with the Channel created event

type ChannelDeletedEvent

type ChannelDeletedEvent ChannelInfoEvent

ChannelDeletedEvent represents the Channel deleted event

type ChannelHistoryChangedEvent

type ChannelHistoryChangedEvent struct {
	Type           string `json:"type"`
	Latest         string `json:"latest"`
	Timestamp      string `json:"ts"`
	EventTimestamp string `json:"event_ts"`

ChannelHistoryChangedEvent represents the Channel history changed event

type ChannelInfoEvent

type ChannelInfoEvent struct {
	// channel_left
	// channel_deleted
	// channel_archive
	// channel_unarchive
	Type      string `json:"type"`
	Channel   string `json:"channel"`
	User      string `json:"user,omitempty"`
	Timestamp string `json:"ts,omitempty"`

ChannelInfoEvent represents the Channel info event

type ChannelJoinedEvent

type ChannelJoinedEvent struct {
	Type    string  `json:"type"`
	Channel Channel `json:"channel"`

ChannelJoinedEvent represents the Channel joined event

type ChannelLeftEvent

type ChannelLeftEvent ChannelInfoEvent

ChannelLeftEvent represents the Channel left event

type ChannelMarkedEvent

type ChannelMarkedEvent ChannelInfoEvent

ChannelMarkedEvent represents the Channel marked event

type ChannelRenameEvent

type ChannelRenameEvent struct {
	Type      string            `json:"type"`
	Channel   ChannelRenameInfo `json:"channel"`
	Timestamp string            `json:"event_ts"`

ChannelRenameEvent represents the Channel rename event

type ChannelRenameInfo

type ChannelRenameInfo struct {
	ID      string `json:"id"`
	Name    string `json:"name"`
	Created string `json:"created"`

ChannelRenameInfo represents the information associated with a Channel rename event

type ChannelUnarchiveEvent

type ChannelUnarchiveEvent ChannelInfoEvent

ChannelUnarchiveEvent represents the Channel unarchive event

type Client added in v0.1.0

type Client struct {
	// contains filtered or unexported fields

func New

func New(token string) *Client

func (*Client) AddPin added in v0.1.0

func (api *Client) AddPin(channel string, item ItemRef) error

AddPin pins an item in a channel

func (*Client) AddReaction added in v0.1.0

func (api *Client) AddReaction(name string, item ItemRef) error

AddReaction adds a reaction emoji to a message, file or file comment.

func (*Client) AddStar added in v0.1.0

func (api *Client) AddStar(channel string, item ItemRef) error

AddStar stars an item in a channel

func (*Client) ArchiveChannel added in v0.1.0

func (api *Client) ArchiveChannel(channel string) error

ArchiveChannel archives the given channel

func (*Client) ArchiveGroup added in v0.1.0

func (api *Client) ArchiveGroup(group string) error

ArchiveGroup archives a private group

func (*Client) AuthTest added in v0.1.0

func (api *Client) AuthTest() (response *AuthTestResponse, error error)

AuthTest tests if the user is able to do authenticated requests or not

func (*Client) CloseGroup added in v0.1.0

func (api *Client) CloseGroup(group string) (bool, bool, error)

CloseGroup closes a private group

func (*Client) CloseIMChannel added in v0.1.0

func (api *Client) CloseIMChannel(channel string) (bool, bool, error)

CloseIMChannel closes the direct message channel

func (*Client) ConnectRTM added in v0.1.0

func (api *Client) ConnectRTM() (info *Info, websocketURL string, err error)

ConnectRTM calls the "rtm.connect" endpoint and returns the provided URL and the compact Info block.

To have a fully managed Websocket connection, use `NewRTM`, and call `ManageConnection()` on it.

func (*Client) CreateChannel added in v0.1.0

func (api *Client) CreateChannel(channel string) (*Channel, error)

CreateChannel creates a channel with the given name and returns a *Channel

func (*Client) CreateChildGroup added in v0.1.0

func (api *Client) CreateChildGroup(group string) (*Group, error)

CreateChildGroup creates a new private group archiving the old one This method takes an existing private group and performs the following steps:

  1. Renames the existing group (from "example" to "example-archived").
  2. Archives the existing group.
  3. Creates a new group with the name of the existing group.
  4. Adds all members of the existing group to the new group.

func (*Client) CreateGroup added in v0.1.0

func (api *Client) CreateGroup(group string) (*Group, error)

CreateGroup creates a private group

func (*Client) CreateUserGroup added in v0.1.0

func (api *Client) CreateUserGroup(userGroup UserGroup) (UserGroup, error)

CreateUserGroup creates a new user group

func (*Client) Debugf added in v0.1.0

func (api *Client) Debugf(format string, v ...interface{})

func (*Client) Debugln added in v0.1.0

func (api *Client) Debugln(v ...interface{})

func (*Client) DeleteFile added in v0.1.0

func (api *Client) DeleteFile(fileID string) error

DeleteFile deletes a file

func (*Client) DeleteMessage added in v0.1.0

func (api *Client) DeleteMessage(channel, messageTimestamp string) (string, string, error)

DeleteMessage deletes a message in a channel

func (*Client) DeleteUserPhoto added in v0.1.0

func (api *Client) DeleteUserPhoto() error

DeleteUserPhoto deletes the current authenticated user's profile image

func (*Client) DisableUser added in v0.1.0

func (api *Client) DisableUser(teamName string, uid string) error

DisableUser disabled a user account, given a user ID

func (*Client) DisableUserGroup added in v0.1.0

func (api *Client) DisableUserGroup(userGroup string) (UserGroup, error)

DisableUserGroup disables an existing user group

func (*Client) EnableUserGroup added in v0.1.0

func (api *Client) EnableUserGroup(userGroup string) (UserGroup, error)

EnableUserGroup enables an existing user group

func (*Client) EndDND added in v0.1.0

func (api *Client) EndDND() error

EndDND ends the user's scheduled Do Not Disturb session

func (*Client) EndSnooze added in v0.1.0

func (api *Client) EndSnooze() (*DNDStatus, error)

EndSnooze ends the current user's snooze mode

func (*Client) GetAccessLogs added in v0.1.0

func (api *Client) GetAccessLogs(params AccessLogParameters) ([]Login, *Paging, error)

GetAccessLogs retrieves a page of logins according to the parameters given

func (*Client) GetBillableInfo added in v0.1.0

func (api *Client) GetBillableInfo(user string) (map[string]BillingActive, error)

func (*Client) GetBillableInfoForTeam added in v0.1.0

func (api *Client) GetBillableInfoForTeam() (map[string]BillingActive, error)

GetBillableInfoForTeam returns the billing_active status of all users on the team.

func (*Client) GetBotInfo added in v0.1.0

func (api *Client) GetBotInfo(bot string) (*Bot, error)

GetBotInfo will retrieve the complete bot information

func (*Client) GetChannelHistory added in v0.1.0

func (api *Client) GetChannelHistory(channel string, params HistoryParameters) (*History, error)

GetChannelHistory retrieves the channel history

func (*Client) GetChannelInfo added in v0.1.0

func (api *Client) GetChannelInfo(channel string) (*Channel, error)

GetChannelInfo retrieves the given channel

func (*Client) GetChannelReplies added in v0.1.0

func (api *Client) GetChannelReplies(channel, thread_ts string) ([]Message, error)

GetChannelReplies gets an entire thread (a message plus all the messages in reply to it).

func (*Client) GetChannels added in v0.1.0

func (api *Client) GetChannels(excludeArchived bool) ([]Channel, error)

GetChannels retrieves all the channels

func (*Client) GetDNDInfo added in v0.1.0

func (api *Client) GetDNDInfo(user *string) (*DNDStatus, error)

GetDNDInfo provides information about a user's current Do Not Disturb settings.

func (*Client) GetDNDTeamInfo added in v0.1.0

func (api *Client) GetDNDTeamInfo(users []string) (map[string]DNDStatus, error)

GetDNDTeamInfo provides information about a user's current Do Not Disturb settings.

func (*Client) GetEmoji added in v0.1.0

func (api *Client) GetEmoji() (map[string]string, error)

GetEmoji retrieves all the emojis

func (*Client) GetFileInfo added in v0.1.0

func (api *Client) GetFileInfo(fileID string, count, page int) (*File, []Comment, *Paging, error)

GetFileInfo retrieves a file and related comments

func (*Client) GetFiles added in v0.1.0

func (api *Client) GetFiles(params GetFilesParameters) ([]File, *Paging, error)

GetFiles retrieves all files according to the parameters given

func (*Client) GetGroupHistory added in v0.1.0

func (api *Client) GetGroupHistory(group string, params HistoryParameters) (*History, error)

GetGroupHistory fetches all the history for a private group

func (*Client) GetGroupInfo added in v0.1.0

func (api *Client) GetGroupInfo(group string) (*Group, error)

GetGroupInfo retrieves the given group

func (*Client) GetGroups added in v0.1.0

func (api *Client) GetGroups(excludeArchived bool) ([]Group, error)

GetGroups retrieves all groups

func (*Client) GetIMChannels added in v0.1.0

func (api *Client) GetIMChannels() ([]IM, error)

GetIMChannels returns the list of direct message channels

func (*Client) GetIMHistory added in v0.1.0

func (api *Client) GetIMHistory(channel string, params HistoryParameters) (*History, error)

GetIMHistory retrieves the direct message channel history

func (*Client) GetReactions added in v0.1.0

func (api *Client) GetReactions(item ItemRef, params GetReactionsParameters) ([]ItemReaction, error)

GetReactions returns details about the reactions on an item.

func (*Client) GetStarred added in v0.1.0

func (api *Client) GetStarred(params StarsParameters) ([]StarredItem, *Paging, error)

GetStarred returns a list of StarredItem items. The user then has to iterate over them and figure out what they should be looking at according to what is in the Type.

for _, item := range items {
    switch c.Type {
    case "file_comment":
    case "file":


This function still exists to maintain backwards compatibility. I exposed it as returning []StarredItem, so it shall stay as StarredItem

func (*Client) GetTeamInfo added in v0.1.0

func (api *Client) GetTeamInfo() (*TeamInfo, error)

GetTeamInfo gets the Team Information of the user

func (*Client) GetUserGroupMembers added in v0.1.0

func (api *Client) GetUserGroupMembers(userGroup string) ([]string, error)

GetUserGroupMembers will retrieve the current list of users in a group

func (*Client) GetUserGroups added in v0.1.0

func (api *Client) GetUserGroups() ([]UserGroup, error)

GetUserGroups returns a list of user groups for the team

func (*Client) GetUserIdentity added in v0.1.0

func (api *Client) GetUserIdentity() (*UserIdentityResponse, error)

GetUserIdentity will retrieve user info available per identity scopes

func (*Client) GetUserInfo added in v0.1.0

func (api *Client) GetUserInfo(user string) (*User, error)

GetUserInfo will retrieve the complete user information

func (*Client) GetUserPresence added in v0.1.0

func (api *Client) GetUserPresence(user string) (*UserPresence, error)

GetUserPresence will retrieve the current presence status of given user.

func (*Client) GetUsers added in v0.1.0

func (api *Client) GetUsers() ([]User, error)

GetUsers returns the list of users (with their detailed information)

func (*Client) InviteGuest added in v0.1.0

func (api *Client) InviteGuest(
	teamName string,
	channel string,
	firstName string,
	lastName string,
	emailAddress string,
) error

InviteGuest invites a user to Slack as a single-channel guest

func (*Client) InviteRestricted added in v0.1.0

func (api *Client) InviteRestricted(
	teamName string,
	channel string,
	firstName string,
	lastName string,
	emailAddress string,
) error

InviteRestricted invites a user to Slack as a restricted account

func (*Client) InviteToTeam added in v0.1.0

func (api *Client) InviteToTeam(
	teamName string,
	firstName string,
	lastName string,
	emailAddress string,
) error

InviteToTeam invites a user to a Slack team

func (*Client) InviteUserToChannel added in v0.1.0

func (api *Client) InviteUserToChannel(channel, user string) (*Channel, error)

InviteUserToChannel invites a user to a given channel and returns a *Channel

func (*Client) InviteUserToGroup added in v0.1.0

func (api *Client) InviteUserToGroup(group, user string) (*Group, bool, error)

InviteUserToGroup invites a specific user to a private group

func (*Client) JoinChannel added in v0.1.0

func (api *Client) JoinChannel(channel string) (*Channel, error)

JoinChannel joins the currently authenticated user to a channel

func (*Client) KickUserFromChannel added in v0.1.0

func (api *Client) KickUserFromChannel(channel, user string) error

KickUserFromChannel kicks a user from a given channel

func (*Client) KickUserFromGroup added in v0.1.0

func (api *Client) KickUserFromGroup(group, user string) error

KickUserFromGroup kicks a user from a group

func (*Client) LeaveChannel added in v0.1.0

func (api *Client) LeaveChannel(channel string) (bool, error)

LeaveChannel makes the authenticated user leave the given channel

func (*Client) LeaveGroup added in v0.1.0

func (api *Client) LeaveGroup(group string) error

LeaveGroup makes authenticated user leave the group

func (*Client) ListPins added in v0.1.0

func (api *Client) ListPins(channel string) ([]Item, *Paging, error)

ListPins returns information about the items a user reacted to.

func (*Client) ListReactions added in v0.1.0

func (api *Client) ListReactions(params ListReactionsParameters) ([]ReactedItem, *Paging, error)

ListReactions returns information about the items a user reacted to.

func (*Client) ListStars added in v0.1.0

func (api *Client) ListStars(params StarsParameters) ([]Item, *Paging, error)

ListStars returns information about the stars a user added

func (*Client) MarkIMChannel added in v0.1.0

func (api *Client) MarkIMChannel(channel, ts string) (err error)

MarkIMChannel sets the read mark of a direct message channel to a specific point

func (*Client) NewRTM added in v0.1.0

func (api *Client) NewRTM() *RTM

NewRTM returns a RTM, which provides a fully managed connection to Slack's websocket-based Real-Time Messaging protocol.

func (*Client) NewRTMWithOptions added in v0.1.0

func (api *Client) NewRTMWithOptions(options *RTMOptions) *RTM

NewRTMWithOptions returns a RTM, which provides a fully managed connection to Slack's websocket-based Real-Time Messaging protocol. This also allows to configure various options available for RTM API.

func (*Client) OpenGroup added in v0.1.0

func (api *Client) OpenGroup(group string) (bool, bool, error)

OpenGroup opens a private group

func (*Client) OpenIMChannel added in v0.1.0

func (api *Client) OpenIMChannel(user string) (bool, bool, string, error)

OpenIMChannel opens a direct message channel to the user provided as argument Returns some status and the channel ID

func (*Client) PostMessage added in v0.1.0

func (api *Client) PostMessage(channel, text string, params PostMessageParameters) (string, string, error)

PostMessage sends a message to a channel. Message is escaped by default according to Use to help crafting your message.

func (*Client) RemovePin added in v0.1.0

func (api *Client) RemovePin(channel string, item ItemRef) error

RemovePin un-pins an item from a channel

func (*Client) RemoveReaction added in v0.1.0

func (api *Client) RemoveReaction(name string, item ItemRef) error

RemoveReaction removes a reaction emoji from a message, file or file comment.

func (*Client) RemoveStar added in v0.1.0

func (api *Client) RemoveStar(channel string, item ItemRef) error

RemoveStar removes a starred item from a channel

func (*Client) RenameChannel added in v0.1.0

func (api *Client) RenameChannel(channel, name string) (*Channel, error)

RenameChannel renames a given channel

func (*Client) RenameGroup added in v0.1.0

func (api *Client) RenameGroup(group, name string) (*Channel, error)

RenameGroup renames a group XXX: They return a channel, not a group. What is this crap? :( Inconsistent api it seems.

func (*Client) RevokeFilePublicURL added in v0.1.0

func (api *Client) RevokeFilePublicURL(fileID string) (*File, error)

RevokeFilePublicURL disables public/external sharing for a file

func (*Client) Search added in v0.1.0

func (api *Client) Search(query string, params SearchParameters) (*SearchMessages, *SearchFiles, error)

func (*Client) SearchFiles added in v0.1.0

func (api *Client) SearchFiles(query string, params SearchParameters) (*SearchFiles, error)

func (*Client) SearchMessages added in v0.1.0

func (api *Client) SearchMessages(query string, params SearchParameters) (*SearchMessages, error)

func (*Client) SendMessage added in v0.1.0

func (api *Client) SendMessage(channel string, options ...MsgOption) (string, string, string, error)

SendMessage more flexible method for configuring messages.

func (*Client) SendSSOBindingEmail added in v0.1.0

func (api *Client) SendSSOBindingEmail(teamName string, user string) error

SendSSOBindingEmail sends an SSO binding email to the specified user

func (*Client) SetChannelPurpose added in v0.1.0

func (api *Client) SetChannelPurpose(channel, purpose string) (string, error)

SetChannelPurpose sets the channel purpose and returns the purpose that was successfully set

func (*Client) SetChannelReadMark added in v0.1.0

func (api *Client) SetChannelReadMark(channel, ts string) error

SetChannelReadMark sets the read mark of a given channel to a specific point Clients should try to avoid making this call too often. When needing to mark a read position, a client should set a timer before making the call. In this way, any further updates needed during the timeout will not generate extra calls (just one per channel). This is useful for when reading scroll-back history, or following a busy live channel. A timeout of 5 seconds is a good starting point. Be sure to flush these calls on shutdown/logout.

func (*Client) SetChannelTopic added in v0.1.0

func (api *Client) SetChannelTopic(channel, topic string) (string, error)

SetChannelTopic sets the channel topic and returns the topic that was successfully set

func (*Client) SetDebug added in v0.1.0

func (api *Client) SetDebug(debug bool)

SetDebug switches the api into debug mode When in debug mode, it logs various info about what its doing If you ever use this in production, don't call SetDebug(true)

func (*Client) SetGroupPurpose added in v0.1.0

func (api *Client) SetGroupPurpose(group, purpose string) (string, error)

SetGroupPurpose sets the group purpose

func (*Client) SetGroupReadMark added in v0.1.0

func (api *Client) SetGroupReadMark(group, ts string) error

SetGroupReadMark sets the read mark on a private group Clients should try to avoid making this call too often. When needing to mark a read position, a client should set a timer before making the call. In this way, any further updates needed during the timeout will not generate extra calls (just one per channel). This is useful for when reading scroll-back history, or following a busy live channel. A timeout of 5 seconds is a good starting point. Be sure to flush these calls on shutdown/logout.

func (*Client) SetGroupTopic added in v0.1.0

func (api *Client) SetGroupTopic(group, topic string) (string, error)

SetGroupTopic sets the group topic

func (*Client) SetRegular added in v0.1.0

func (api *Client) SetRegular(teamName string, user string) error

SetRegular enables the specified user

func (*Client) SetRestricted added in v0.1.0

func (api *Client) SetRestricted(teamName, uid string) error

SetRestricted converts a user into a restricted account

func (*Client) SetSnooze added in v0.1.0

func (api *Client) SetSnooze(minutes int) (*DNDStatus, error)

SetSnooze adjusts the snooze duration for a user's Do Not Disturb settings. If a snooze session is not already active for the user, invoking this method will begin one for the specified duration.

func (*Client) SetUltraRestricted added in v0.1.0

func (api *Client) SetUltraRestricted(teamName, uid, channel string) error

SetUltraRestricted converts a user into a single-channel guest

func (*Client) SetUserAsActive added in v0.1.0

func (api *Client) SetUserAsActive() error

SetUserAsActive marks the currently authenticated user as active

func (*Client) SetUserCustomStatus added in v0.1.0

func (api *Client) SetUserCustomStatus(statusText, statusEmoji string) error

SetUserCustomStatus will set a custom status and emoji for the currently authenticated user. If statusEmoji is "" and statusText is not, the Slack API will automatically set it to ":speech_balloon:". Otherwise, if both are "" the Slack API will unset the custom status/emoji.

func (*Client) SetUserPhoto added in v0.1.0

func (api *Client) SetUserPhoto(image string, params UserSetPhotoParams) error

SetUserPhoto changes the currently authenticated user's profile image

func (*Client) SetUserPresence added in v0.1.0

func (api *Client) SetUserPresence(presence string) error

SetUserPresence changes the currently authenticated user presence

func (*Client) ShareFilePublicURL added in v0.1.0

func (api *Client) ShareFilePublicURL(fileID string) (*File, []Comment, *Paging, error)

ShareFilePublicURL enabled public/external sharing for a file

func (*Client) StartRTM added in v0.1.0

func (api *Client) StartRTM() (info *Info, websocketURL string, err error)

StartRTM calls the "rtm.start" endpoint and returns the provided URL and the full Info block.

To have a fully managed Websocket connection, use `NewRTM`, and call `ManageConnection()` on it.

func (*Client) UnarchiveChannel added in v0.1.0

func (api *Client) UnarchiveChannel(channel string) error

UnarchiveChannel unarchives the given channel

func (*Client) UnarchiveGroup added in v0.1.0

func (api *Client) UnarchiveGroup(group string) error

UnarchiveGroup unarchives a private group

func (*Client) UnsetUserCustomStatus added in v0.1.0

func (api *Client) UnsetUserCustomStatus() error

UnsetUserCustomStatus removes the custom status message for the currently authenticated user. This is a convenience method that wraps (*Client).SetUserCustomStatus().

func (*Client) UpdateMessage added in v0.1.0

func (api *Client) UpdateMessage(channel, timestamp, text string) (string, string, string, error)

UpdateMessage updates a message in a channel

func (*Client) UpdateUserGroup added in v0.1.0

func (api *Client) UpdateUserGroup(userGroup UserGroup) (UserGroup, error)

UpdateUserGroup will update an existing user group

func (*Client) UpdateUserGroupMembers added in v0.1.0

func (api *Client) UpdateUserGroupMembers(userGroup string, members string) (UserGroup, error)

UpdateUserGroupMembers will update the members of an existing user group

func (*Client) UploadFile added in v0.1.0

func (api *Client) UploadFile(params FileUploadParameters) (file *File, err error)

UploadFile uploads a file

type CommandsChangedEvent

type CommandsChangedEvent struct {
	Type           string `json:"type"`
	EventTimestamp string `json:"event_ts"`

CommandsChangedEvent represents the commands changed event

type Comment

type Comment struct {
	ID        string   `json:"id,omitempty"`
	Created   JSONTime `json:"created,omitempty"`
	Timestamp JSONTime `json:"timestamp,omitempty"`
	User      string   `json:"user,omitempty"`
	Comment   string   `json:"comment,omitempty"`

Comment contains all the information relative to a comment

type ConfirmationField added in v0.1.0

type ConfirmationField struct {
	Title       string `json:"title,omitempty"`        // Optional.
	Text        string `json:"text"`                   // Required.
	OkText      string `json:"ok_text,omitempty"`      // Optional. Defaults to "Okay"
	DismissText string `json:"dismiss_text,omitempty"` // Optional. Defaults to "Cancel"

ConfirmationField are used to ask users to confirm actions

type ConnectedEvent added in v0.1.0

type ConnectedEvent struct {
	ConnectionCount int // 1 = first time, 2 = second time
	Info            *Info

ConnectedEvent is used for when we connect to Slack

type ConnectingEvent added in v0.1.0

type ConnectingEvent struct {
	Attempt         int // 1 = first attempt, 2 = second attempt
	ConnectionCount int

ConnectingEvent contains information about our connection attempt

type ConnectionErrorEvent added in v0.1.0

type ConnectionErrorEvent struct {
	Attempt  int
	ErrorObj error

ConnectionErrorEvent contains information about a connection error

func (*ConnectionErrorEvent) Error added in v0.1.0

func (c *ConnectionErrorEvent) Error() string

type CtxChannel

type CtxChannel struct {
	ID   string `json:"id"`
	Name string `json:"name"`

type CtxMessage

type CtxMessage struct {
	User      string `json:"user"`
	Username  string `json:"username"`
	Text      string `json:"text"`
	Timestamp string `json:"ts"`
	Type      string `json:"type"`

type DNDStatus added in v0.1.0

type DNDStatus struct {
	Enabled            bool `json:"dnd_enabled"`
	NextStartTimestamp int  `json:"next_dnd_start_ts"`
	NextEndTimestamp   int  `json:"next_dnd_end_ts"`

type DNDUpdatedEvent added in v0.1.0

type DNDUpdatedEvent struct {
	Type   string    `json:"type"`
	User   string    `json:"user"`
	Status DNDStatus `json:"dnd_status"`

DNDUpdatedEvent represents the update event for Do Not Disturb

type DisconnectedEvent added in v0.1.0

type DisconnectedEvent struct {
	Intentional bool

DisconnectedEvent contains information about how we disconnected

type Edited added in v0.1.0

type Edited struct {
	User      string `json:"user,omitempty"`
	Timestamp string `json:"ts,omitempty"`

Edited indicates that a message has been edited.

type EmailDomainChangedEvent

type EmailDomainChangedEvent struct {
	Type           string `json:"type"`
	EventTimestamp string `json:"event_ts"`
	EmailDomain    string `json:"email_domain"`

EmailDomainChangedEvent represents the email domain changed event

type EmojiChangedEvent

type EmojiChangedEvent struct {
	Type           string   `json:"type"`
	SubType        string   `json:"subtype"`
	Name           string   `json:"name"`
	Names          []string `json:"names"`
	Value          string   `json:"value"`
	EventTimestamp string   `json:"event_ts"`

EmojiChangedEvent represents the emoji changed event

type Event

type Event struct {
	Type string `json:"type,omitempty"`

Event contains the event type

type File

type File struct {
	ID        string   `json:"id"`
	Created   JSONTime `json:"created"`
	Timestamp JSONTime `json:"timestamp"`

	Name              string `json:"name"`
	Title             string `json:"title"`
	Mimetype          string `json:"mimetype"`
	ImageExifRotation int    `json:"image_exif_rotation"`
	Filetype          string `json:"filetype"`
	PrettyType        string `json:"pretty_type"`
	User              string `json:"user"`

	Mode         string `json:"mode"`
	Editable     bool   `json:"editable"`
	IsExternal   bool   `json:"is_external"`
	ExternalType string `json:"external_type"`

	Size int `json:"size"`

	URL                string `json:"url"`          // Deprecated - never set
	URLDownload        string `json:"url_download"` // Deprecated - never set
	URLPrivate         string `json:"url_private"`
	URLPrivateDownload string `json:"url_private_download"`

	OriginalH   int    `json:"original_h"`
	OriginalW   int    `json:"original_w"`
	Thumb64     string `json:"thumb_64"`
	Thumb80     string `json:"thumb_80"`
	Thumb160    string `json:"thumb_160"`
	Thumb360    string `json:"thumb_360"`
	Thumb360Gif string `json:"thumb_360_gif"`
	Thumb360W   int    `json:"thumb_360_w"`
	Thumb360H   int    `json:"thumb_360_h"`
	Thumb480    string `json:"thumb_480"`
	Thumb480W   int    `json:"thumb_480_w"`
	Thumb480H   int    `json:"thumb_480_h"`
	Thumb720    string `json:"thumb_720"`
	Thumb720W   int    `json:"thumb_720_w"`
	Thumb720H   int    `json:"thumb_720_h"`
	Thumb960    string `json:"thumb_960"`
	Thumb960W   int    `json:"thumb_960_w"`
	Thumb960H   int    `json:"thumb_960_h"`
	Thumb1024   string `json:"thumb_1024"`
	Thumb1024W  int    `json:"thumb_1024_w"`
	Thumb1024H  int    `json:"thumb_1024_h"`

	Permalink       string `json:"permalink"`
	PermalinkPublic string `json:"permalink_public"`

	EditLink         string `json:"edit_link"`
	Preview          string `json:"preview"`
	PreviewHighlight string `json:"preview_highlight"`
	Lines            int    `json:"lines"`
	LinesMore        int    `json:"lines_more"`

	IsPublic        bool     `json:"is_public"`
	PublicURLShared bool     `json:"public_url_shared"`
	Channels        []string `json:"channels"`
	Groups          []string `json:"groups"`
	IMs             []string `json:"ims"`
	InitialComment  Comment  `json:"initial_comment"`
	CommentsCount   int      `json:"comments_count"`
	NumStars        int      `json:"num_stars"`
	IsStarred       bool     `json:"is_starred"`

File contains all the information for a file

type FileChangeEvent

type FileChangeEvent fileActionEvent

FileChangeEvent represents the File change event

type FileCommentAddedEvent

type FileCommentAddedEvent struct {
	Comment Comment `json:"comment"`
	// contains filtered or unexported fields

FileCommentAddedEvent represents the File comment added event

type FileCommentDeletedEvent

type FileCommentDeletedEvent struct {
	Comment string `json:"comment"`
	// contains filtered or unexported fields

FileCommentDeletedEvent represents the File comment deleted event

type FileCommentEditedEvent

type FileCommentEditedEvent struct {
	Comment Comment `json:"comment"`
	// contains filtered or unexported fields

FileCommentEditedEvent represents the File comment edited event

type FileCreatedEvent

type FileCreatedEvent fileActionEvent

FileCreatedEvent represents the File created event

type FileDeletedEvent

type FileDeletedEvent fileActionEvent

FileDeletedEvent represents the File deleted event

type FilePrivateEvent

type FilePrivateEvent fileActionEvent

FilePrivateEvent represents the File private event

type FilePublicEvent

type FilePublicEvent fileActionEvent

FilePublicEvent represents the File public event

type FileSharedEvent

type FileSharedEvent fileActionEvent

FileSharedEvent represents the File shared event

type FileUnsharedEvent

type FileUnsharedEvent fileActionEvent

FileUnsharedEvent represents the File unshared event

type FileUploadParameters

type FileUploadParameters struct {
	File           string
	Content        string
	Reader         io.Reader
	Filetype       string
	Filename       string
	Title          string
	InitialComment string
	Channels       []string

FileUploadParameters contains all the parameters necessary (including the optional ones) for an UploadFile() request.

There are three ways to upload a file. You can either set Content if file is small, set Reader if file is large, or provide a local file path in File to upload it from your filesystem.

type GetFilesParameters

type GetFilesParameters struct {
	User          string
	Channel       string
	TimestampFrom JSONTime
	TimestampTo   JSONTime
	Types         string
	Count         int
	Page          int

GetFilesParameters contains all the parameters necessary (including the optional ones) for a GetFiles() request

func NewGetFilesParameters

func NewGetFilesParameters() GetFilesParameters

NewGetFilesParameters provides an instance of GetFilesParameters with all the sane default values set

type GetReactionsParameters

type GetReactionsParameters struct {
	Full bool

GetReactionsParameters is the inputs to get reactions to an item.

func NewGetReactionsParameters

func NewGetReactionsParameters() GetReactionsParameters

NewGetReactionsParameters initializes the inputs to get reactions to an item.

type Group

type Group struct {
	IsGroup bool `json:"is_group"`
	// contains filtered or unexported fields

Group contains all the information for a group

type GroupArchiveEvent

type GroupArchiveEvent ChannelInfoEvent

GroupArchiveEvent represents the Group archive event

type GroupCloseEvent

type GroupCloseEvent ChannelInfoEvent

GroupCloseEvent represents the Group close event

type GroupCreatedEvent

type GroupCreatedEvent struct {
	Type    string             `json:"type"`
	User    string             `json:"user"`
	Channel ChannelCreatedInfo `json:"channel"`

GroupCreatedEvent represents the Group created event

type GroupHistoryChangedEvent

type GroupHistoryChangedEvent ChannelHistoryChangedEvent

GroupHistoryChangedEvent represents the Group history changed event

type GroupJoinedEvent

type GroupJoinedEvent ChannelJoinedEvent

GroupJoinedEvent represents the Group joined event

type GroupLeftEvent

type GroupLeftEvent ChannelInfoEvent

GroupLeftEvent represents the Group left event

type GroupMarkedEvent

type GroupMarkedEvent ChannelInfoEvent

GroupMarkedEvent represents the Group marked event

type GroupOpenEvent

type GroupOpenEvent ChannelInfoEvent

GroupOpenEvent represents the Group open event

type GroupRenameEvent

type GroupRenameEvent struct {
	Type      string          `json:"type"`
	Group     GroupRenameInfo `json:"channel"`
	Timestamp string          `json:"ts"`

GroupRenameEvent represents the Group rename event

type GroupRenameInfo added in v0.1.0

type GroupRenameInfo struct {
	ID      string `json:"id"`
	Name    string `json:"name"`
	Created string `json:"created"`

GroupRenameInfo represents the group info related to the renamed group

type GroupUnarchiveEvent

type GroupUnarchiveEvent ChannelInfoEvent

GroupUnarchiveEvent represents the Group unarchive event

type HTTPRequester added in v0.1.0

type HTTPRequester interface {
	Do(*http.Request) (*http.Response, error)

HTTPRequester defines the minimal interface needed for an http.Client to be implemented.

Use it in conjunction with the SetHTTPClient function to allow for other capabilities like a tracing http.Client

type HelloEvent

type HelloEvent struct{}

HelloEvent represents the hello event

type History

type History struct {
	Latest   string    `json:"latest"`
	Messages []Message `json:"messages"`
	HasMore  bool      `json:"has_more"`

History contains message history information needed to navigate a Channel / Group / DM history

type HistoryParameters

type HistoryParameters struct {
	Latest    string
	Oldest    string
	Count     int
	Inclusive bool
	Unreads   bool

HistoryParameters contains all the necessary information to help in the retrieval of history for Channels/Groups/DMs

func NewHistoryParameters

func NewHistoryParameters() HistoryParameters

NewHistoryParameters provides an instance of HistoryParameters with all the sane default values set

type IDGenerator added in v0.1.0

type IDGenerator interface {
	Next() int

IDGenerator provides an interface for generating integer ID values.

func NewSafeID added in v0.1.0

func NewSafeID(startID int) IDGenerator

NewSafeID returns a new instance of an IDGenerator which is safe for concurrent use by multiple goroutines.

type IM

type IM struct {
	IsIM          bool   `json:"is_im"`
	User          string `json:"user"`
	IsUserDeleted bool   `json:"is_user_deleted"`
	// contains filtered or unexported fields

IM contains information related to the Direct Message channel

type IMCloseEvent

type IMCloseEvent ChannelInfoEvent

IMCloseEvent represents the IM close event

type IMCreatedEvent

type IMCreatedEvent struct {
	Type    string             `json:"type"`
	User    string             `json:"user"`
	Channel ChannelCreatedInfo `json:"channel"`

IMCreatedEvent represents the IM created event

type IMHistoryChangedEvent

type IMHistoryChangedEvent ChannelHistoryChangedEvent

IMHistoryChangedEvent represents the IM history changed event

type IMMarkedEvent

type IMMarkedEvent ChannelInfoEvent

IMMarkedEvent represents the IM marked event

type IMMarkedHistoryChanged

type IMMarkedHistoryChanged ChannelInfoEvent

IMMarkedHistoryChanged represents the IM marked history changed event

type IMOpenEvent

type IMOpenEvent ChannelInfoEvent

IMOpenEvent represents the IM open event

type Icon added in v0.1.0

type Icon struct {
	IconURL   string `json:"icon_url,omitempty"`
	IconEmoji string `json:"icon_emoji,omitempty"`

Icon is used for bot messages

type Icons

type Icons struct {
	Image36 string `json:"image_36,omitempty"`
	Image48 string `json:"image_48,omitempty"`
	Image72 string `json:"image_72,omitempty"`

Icons XXX: needs further investigation

type IncomingEventError added in v0.1.0

type IncomingEventError struct {
	ErrorObj error

IncomingEventError contains information about an unexpected error receiving a websocket event

func (*IncomingEventError) Error added in v0.1.0

func (i *IncomingEventError) Error() string

type Info

type Info struct {
	URL      string       `json:"url,omitempty"`
	User     *UserDetails `json:"self,omitempty"`
	Team     *Team        `json:"team,omitempty"`
	Users    []User       `json:"users,omitempty"`
	Channels []Channel    `json:"channels,omitempty"`
	Groups   []Group      `json:"groups,omitempty"`
	Bots     []Bot        `json:"bots,omitempty"`
	IMs      []IM         `json:"ims,omitempty"`

Info contains various details about Users, Channels, Bots and the authenticated user. It is returned by StartRTM or included in the "ConnectedEvent" RTM event.

func (Info) GetBotByID added in v0.1.0

func (info Info) GetBotByID(botID string) *Bot

GetBotByID returns a bot given a bot id

func (Info) GetChannelByID added in v0.1.0

func (info Info) GetChannelByID(channelID string) *Channel

GetChannelByID returns a channel given a channel id

func (Info) GetGroupByID added in v0.1.0

func (info Info) GetGroupByID(groupID string) *Group

GetGroupByID returns a group given a group id

func (Info) GetIMByID added in v0.1.0

func (info Info) GetIMByID(imID string) *IM

GetIMByID returns an IM given an IM id

func (Info) GetUserByID added in v0.1.0

func (info Info) GetUserByID(userID string) *User

GetUserByID returns a user given a user id

type InvalidAuthEvent added in v0.1.0

type InvalidAuthEvent struct{}

InvalidAuthEvent is used in case we can't even authenticate with the API

type Item

type Item struct {
	Type      string   `json:"type"`
	Channel   string   `json:"channel,omitempty"`
	Message   *Message `json:"message,omitempty"`
	File      *File    `json:"file,omitempty"`
	Comment   *Comment `json:"comment,omitempty"`
	Timestamp string   `json:"ts,omitempty"`

Item is any type of slack message - message, file, or file comment.

func NewChannelItem

func NewChannelItem(ch string) Item

NewChannelItem turns a channel id into a typed channel struct.

func NewFileCommentItem

func NewFileCommentItem(f *File, c *Comment) Item

NewFileCommentItem turns a file and comment into a typed file_comment struct.

func NewFileItem

func NewFileItem(f *File) Item

NewFileItem turns a file into a typed file struct.

func NewGroupItem

func NewGroupItem(ch string) Item

NewGroupItem turns a channel id into a typed group struct.

func NewIMItem

func NewIMItem(ch string) Item

NewIMItem turns a channel id into a typed im struct.

func NewMessageItem

func NewMessageItem(ch string, m *Message) Item

NewMessageItem turns a message on a channel into a typed message struct.

type ItemReaction

type ItemReaction struct {
	Name  string   `json:"name"`
	Count int      `json:"count"`
	Users []string `json:"users"`

ItemReaction is the reactions that have happened on an item.

type ItemRef

type ItemRef struct {
	Channel   string `json:"channel"`
	Timestamp string `json:"timestamp"`
	File      string `json:"file"`
	Comment   string `json:"file_comment"`

ItemRef is a reference to a message of any type. One of FileID, CommentId, or the combination of ChannelId and Timestamp must be specified.

func NewRefToComment

func NewRefToComment(comment string) ItemRef

NewRefToComment initializes a reference to a file comment.

func NewRefToFile

func NewRefToFile(file string) ItemRef

NewRefToFile initializes a reference to a file.

func NewRefToMessage

func NewRefToMessage(channel, timestamp string) ItemRef

NewRefToMessage initializes a reference to to a message.

type JSONTime

type JSONTime int64

JSONTime exists so that we can have a String method converting the date

func (JSONTime) String

func (t JSONTime) String() string

String converts the unix timestamp into a string

func (JSONTime) Time added in v0.1.0

func (t JSONTime) Time() time.Time

Time returns a `time.Time` representation of this value.

type LatencyReport

type LatencyReport struct {
	Value time.Duration

LatencyReport contains information about connection latency

type ListReactionsParameters

type ListReactionsParameters struct {
	User  string
	Count int
	Page  int
	Full  bool

ListReactionsParameters is the inputs to find all reactions by a user.

func NewListReactionsParameters

func NewListReactionsParameters() ListReactionsParameters

NewListReactionsParameters initializes the inputs to find all reactions performed by a user.

type Login added in v0.1.0

type Login struct {
	UserID    string `json:"user_id"`
	Username  string `json:"username"`
	DateFirst int    `json:"date_first"`
	DateLast  int    `json:"date_last"`
	Count     int    `json:"count"`
	IP        string `json:"ip"`
	UserAgent string `json:"user_agent"`
	ISP       string `json:"isp"`
	Country   string `json:"country"`
	Region    string `json:"region"`

type LoginResponse added in v0.1.0

type LoginResponse struct {
	Logins []Login `json:"logins"`
	Paging `json:"paging"`

type ManualPresenceChangeEvent

type ManualPresenceChangeEvent struct {
	Type     string `json:"type"`
	Presence string `json:"presence"`

ManualPresenceChangeEvent represents the manual presence change event

type Message

type Message struct {
	SubMessage *Msg `json:"message,omitempty"`

Message is an auxiliary type to allow us to have a message containing sub messages

type MessageEvent

type MessageEvent Message

MessageEvent represents a Slack Message (used as the event type for an incoming message)

type MessageTooLongEvent added in v0.1.0

type MessageTooLongEvent struct {
	Message   OutgoingMessage
	MaxLength int

MessageTooLongEvent is used when sending a message that is too long

func (*MessageTooLongEvent) Error added in v0.1.0

func (m *MessageTooLongEvent) Error() string

type Msg

type Msg struct {
	// Basic Message
	Type            string       `json:"type,omitempty"`
	Channel         string       `json:"channel,omitempty"`
	User            string       `json:"user,omitempty"`
	Text            string       `json:"text,omitempty"`
	Timestamp       string       `json:"ts,omitempty"`
	ThreadTimestamp string       `json:"thread_ts,omitempty"`
	IsStarred       bool         `json:"is_starred,omitempty"`
	PinnedTo        []string     `json:"pinned_to, omitempty"`
	Attachments     []Attachment `json:"attachments,omitempty"`
	Edited          *Edited      `json:"edited,omitempty"`

	// Message Subtypes
	SubType string `json:"subtype,omitempty"`

	// Hidden Subtypes
	Hidden           bool   `json:"hidden,omitempty"`     // message_changed, message_deleted, unpinned_item
	DeletedTimestamp string `json:"deleted_ts,omitempty"` // message_deleted
	EventTimestamp   string `json:"event_ts,omitempty"`

	// bot_message (
	BotID    string `json:"bot_id,omitempty"`
	Username string `json:"username,omitempty"`
	Icons    *Icon  `json:"icons,omitempty"`

	// channel_join, group_join
	Inviter string `json:"inviter,omitempty"`

	// channel_topic, group_topic
	Topic string `json:"topic,omitempty"`

	// channel_purpose, group_purpose
	Purpose string `json:"purpose,omitempty"`

	// channel_name, group_name
	Name    string `json:"name,omitempty"`
	OldName string `json:"old_name,omitempty"`

	// channel_archive, group_archive
	Members []string `json:"members,omitempty"`

	// channels.replies, groups.replies, im.replies, mpim.replies
	ReplyCount   int     `json:"reply_count,omitempty"`
	Replies      []Reply `json:"replies,omitempty"`
	ParentUserId string  `json:"parent_user_id,omitempty"`

	// file_share, file_comment, file_mention
	File *File `json:"file,omitempty"`

	// file_share
	Upload bool `json:"upload,omitempty"`

	// file_comment
	Comment *Comment `json:"comment,omitempty"`

	// pinned_item
	ItemType string `json:"item_type,omitempty"`

	ReplyTo int    `json:"reply_to,omitempty"`
	Team    string `json:"team,omitempty"`

	// reactions
	Reactions []ItemReaction `json:"reactions,omitempty"`

Msg contains information about a slack message

type MsgOption added in v0.1.0

type MsgOption func(*sendConfig) error

MsgOption option provided when sending a message.

func MsgOptionAsUser added in v0.1.0

func MsgOptionAsUser(b bool) MsgOption

MsgOptionAsUser whether or not to send the message as the user.

func MsgOptionAttachments added in v0.1.0

func MsgOptionAttachments(attachments ...Attachment) MsgOption

MsgOptionAttachments provide attachments for the message.

func MsgOptionDelete added in v0.1.0

func MsgOptionDelete(timestamp string) MsgOption

MsgOptionDelete deletes a message based on the timestamp.

func MsgOptionDisableMarkdown added in v0.1.0

func MsgOptionDisableMarkdown() MsgOption

MsgOptionDisableMarkdown disables markdown.

func MsgOptionDisableMediaUnfurl added in v0.1.0

func MsgOptionDisableMediaUnfurl() MsgOption

MsgOptionDisableMediaUnfurl disables media unfurling.

func MsgOptionEnableLinkUnfurl added in v0.1.0

func MsgOptionEnableLinkUnfurl() MsgOption

MsgOptionEnableLinkUnfurl enables link unfurling

func MsgOptionPost added in v0.1.0

func MsgOptionPost() MsgOption

MsgOptionPost posts a messages, this is the default.

func MsgOptionPostMessageParameters added in v0.1.0

func MsgOptionPostMessageParameters(params PostMessageParameters) MsgOption

MsgOptionPostMessageParameters maintain backwards compatibility.

func MsgOptionText added in v0.1.0

func MsgOptionText(text string, escape bool) MsgOption

MsgOptionText provide the text for the message, optionally escape the provided text.

func MsgOptionUpdate added in v0.1.0

func MsgOptionUpdate(timestamp string) MsgOption

MsgOptionUpdate updates a message based on the timestamp.

type OAuthResponse added in v0.1.0

type OAuthResponse struct {
	AccessToken     string                       `json:"access_token"`
	Scope           string                       `json:"scope"`
	TeamName        string                       `json:"team_name"`
	TeamID          string                       `json:"team_id"`
	IncomingWebhook OAuthResponseIncomingWebhook `json:"incoming_webhook"`
	Bot             OAuthResponseBot             `json:"bot"`
	UserID          string                       `json:"user_id,omitempty"`

func GetOAuthResponse added in v0.1.0

func GetOAuthResponse(clientID, clientSecret, code, redirectURI string, debug bool) (resp *OAuthResponse, err error)

type OAuthResponseBot added in v0.1.0

type OAuthResponseBot struct {
	BotUserID      string `json:"bot_user_id"`
	BotAccessToken string `json:"bot_access_token"`

type OAuthResponseIncomingWebhook added in v0.1.0

type OAuthResponseIncomingWebhook struct {
	URL              string `json:"url"`
	Channel          string `json:"channel"`
	ChannelID        string `json:"channel_id,omitempty"`
	ConfigurationURL string `json:"configuration_url"`

type OutgoingErrorEvent added in v0.1.0

type OutgoingErrorEvent struct {
	Message  OutgoingMessage
	ErrorObj error

OutgoingErrorEvent contains information in case there were errors sending messages

func (OutgoingErrorEvent) Error added in v0.1.0

func (o OutgoingErrorEvent) Error() string

type OutgoingMessage

type OutgoingMessage struct {
	ID              int    `json:"id"`
	Channel         string `json:"channel,omitempty"`
	Text            string `json:"text,omitempty"`
	Type            string `json:"type,omitempty"`
	ThreadTimestamp string `json:"thread_ts,omitempty"`

OutgoingMessage is used for the realtime API, and seems incomplete.

type Pagination

type Pagination struct {
	TotalCount int `json:"total_count"`
	Page       int `json:"page"`
	PerPage    int `json:"per_page"`
	PageCount  int `json:"page_count"`
	First      int `json:"first"`
	Last       int `json:"last"`

Pagination contains pagination information This is different from Paging in that it contains additional details

type Paging

type Paging struct {
	Count int `json:"count"`
	Total int `json:"total"`
	Page  int `json:"page"`
	Pages int `json:"pages"`

Paging contains paging information

type PinAddedEvent added in v0.1.0

type PinAddedEvent pinEvent

PinAddedEvent represents the Pin added event

type PinRemovedEvent added in v0.1.0

type PinRemovedEvent pinEvent

PinRemovedEvent represents the Pin removed event

type Ping

type Ping struct {
	ID   int    `json:"id"`
	Type string `json:"type"`

Ping contains information about a Ping Event

type Pong

type Pong struct {
	Type    string `json:"type"`
	ReplyTo int    `json:"reply_to"`

Pong contains information about a Pong Event

type PostMessageParameters

type PostMessageParameters struct {
	Text            string       `json:"text"`
	Username        string       `json:"user_name"`
	AsUser          bool         `json:"as_user"`
	Parse           string       `json:"parse"`
	ThreadTimestamp string       `json:"thread_ts"`
	LinkNames       int          `json:"link_names"`
	Attachments     []Attachment `json:"attachments"`
	UnfurlLinks     bool         `json:"unfurl_links"`
	UnfurlMedia     bool         `json:"unfurl_media"`
	IconURL         string       `json:"icon_url"`
	IconEmoji       string       `json:"icon_emoji"`
	Markdown        bool         `json:"mrkdwn,omitempty"`
	EscapeText      bool         `json:"escape_text"`

PostMessageParameters contains all the parameters necessary (including the optional ones) for a PostMessage() request

func NewPostMessageParameters

func NewPostMessageParameters() PostMessageParameters

NewPostMessageParameters provides an instance of PostMessageParameters with all the sane default values set

type PrefChangeEvent

type PrefChangeEvent struct {
	Type  string          `json:"type"`
	Name  string          `json:"name"`
	Value json.RawMessage `json:"value"`

PrefChangeEvent represents a user preferences change event

type PresenceChangeEvent

type PresenceChangeEvent struct {
	Type     string `json:"type"`
	Presence string `json:"presence"`
	User     string `json:"user"`

PresenceChangeEvent represents the presence change event

type Purpose added in v0.1.0

type Purpose struct {
	Value   string   `json:"value"`
	Creator string   `json:"creator"`
	LastSet JSONTime `json:"last_set"`

Purpose contains information about the purpose

type RTM added in v0.1.0

type RTM struct {
	IncomingEvents chan RTMEvent

	// Client is the main API, embedded
	// contains filtered or unexported fields

RTM represents a managed websocket connection. It also supports all the methods of the `Client` type.

Create this element with Client's NewRTM() or NewRTMWithOptions(*RTMOptions)

func (*RTM) Disconnect added in v0.1.0

func (rtm *RTM) Disconnect() error

Disconnect and wait, blocking until a successful disconnection.

func (*RTM) GetInfo added in v0.1.0

func (rtm *RTM) GetInfo() *Info

GetInfo returns the info structure received when calling "startrtm", holding all channels, groups and other metadata needed to implement a full chat client. It will be non-nil after a call to StartRTM().

func (*RTM) ManageConnection added in v0.1.0

func (rtm *RTM) ManageConnection()

ManageConnection can be called on a Slack RTM instance returned by the NewRTM method. It will connect to the slack RTM API and handle all incoming and outgoing events. If a connection fails then it will attempt to reconnect and will notify any listeners through an error event on the IncomingEvents channel.

If the connection ends and the disconnect was unintentional then this will attempt to reconnect.

This should only be called once per slack API! Otherwise expect undefined behavior.

The defined error events are located in websocket_internals.go.

func (*RTM) NewOutgoingMessage added in v0.1.0

func (rtm *RTM) NewOutgoingMessage(text string, channel string) *OutgoingMessage

NewOutgoingMessage prepares an OutgoingMessage that the user can use to send a message. Use this function to properly set the messageID.

func (*RTM) NewTypingMessage added in v0.1.0

func (rtm *RTM) NewTypingMessage(channel string) *OutgoingMessage

NewTypingMessage prepares an OutgoingMessage that the user can use to send as a typing indicator. Use this function to properly set the messageID.

func (*RTM) Reconnect added in v0.1.0

func (rtm *RTM) Reconnect() error

Reconnect only makes sense if you've successfully disconnectd with Disconnect().

func (*RTM) SendMessage added in v0.1.0

func (rtm *RTM) SendMessage(msg *OutgoingMessage)

SendMessage submits a simple message through the websocket. For more complicated messages, use `rtm.PostMessage` with a complete struct describing your attachments and all.

type RTMError added in v0.1.0

type RTMError struct {
	Code int
	Msg  string

RTMError encapsulates error information as returned by the Slack API

func (RTMError) Error added in v0.1.0

func (s RTMError) Error() string

type RTMEvent added in v0.1.0

type RTMEvent struct {
	Type string
	Data interface{}

RTMEvent is the main wrapper. You will find all the other messages attached

type RTMOptions added in v0.1.0

type RTMOptions struct {
	// UseRTMStart set to true in order to use rtm.start or false to use rtm.connect
	// As of 11th July 2017 you should prefer setting this to false, see:
	UseRTMStart bool

RTMOptions allows configuration of various options available for RTM messaging

This structure will evolve in time so please make sure you are always using the named keys for every entry available as per Go 1 compatibility promise adding fields to this structure should not be considered a breaking change.

type RTMResponse added in v0.1.0

type RTMResponse struct {
	Ok    bool      `json:"ok"`
	Error *RTMError `json:"error"`

RTMResponse encapsulates response details as returned by the Slack API

type ReactedItem

type ReactedItem struct {
	Reactions []ItemReaction

ReactedItem is an item that was reacted to, and the details of the reactions.

type ReactionAddedEvent

type ReactionAddedEvent reactionEvent

ReactionAddedEvent represents the Reaction added event

type ReactionRemovedEvent

type ReactionRemovedEvent reactionEvent

ReactionRemovedEvent represents the Reaction removed event

type ReconnectUrlEvent added in v0.1.0

type ReconnectUrlEvent struct {
	Type string `json:"type"`
	URL  string `json:"url"`

ReconnectUrlEvent represents the receiving reconnect url event

type Reply added in v0.1.0

type Reply struct {
	User      string `json:"user,omitempty"`
	Timestamp string `json:"ts,omitempty"`

Reply contains information about a reply for a thread

type SearchFiles

type SearchFiles struct {
	Matches    []File `json:"matches"`
	Paging     `json:"paging"`
	Pagination `json:"pagination"`
	Total      int `json:"total"`

type SearchMessage

type SearchMessage struct {
	Type      string     `json:"type"`
	Channel   CtxChannel `json:"channel"`
	User      string     `json:"user"`
	Username  string     `json:"username"`
	Timestamp string     `json:"ts"`
	Text      string     `json:"text"`
	Permalink string     `json:"permalink"`
	Previous  CtxMessage `json:"previous"`
	Previous2 CtxMessage `json:"previous_2"`
	Next      CtxMessage `json:"next"`
	Next2     CtxMessage `json:"next_2"`

type SearchMessages

type SearchMessages struct {
	Matches    []SearchMessage `json:"matches"`
	Paging     `json:"paging"`
	Pagination `json:"pagination"`
	Total      int `json:"total"`

type SearchParameters

type SearchParameters struct {
	Sort          string
	SortDirection string
	Highlight     bool
	Count         int
	Page          int

func NewSearchParameters

func NewSearchParameters() SearchParameters

type SlackResponse

type SlackResponse struct {
	Ok    bool   `json:"ok"`
	Error string `json:"error"`

type SnoozeDebug added in v0.1.0

type SnoozeDebug struct {
	SnoozeEndDate string `json:"snooze_end_date"`

type SnoozeInfo added in v0.1.0

type SnoozeInfo struct {
	SnoozeEnabled   bool        `json:"snooze_enabled,omitempty"`
	SnoozeEndTime   int         `json:"snooze_endtime,omitempty"`
	SnoozeRemaining int         `json:"snooze_remaining,omitempty"`
	SnoozeDebug     SnoozeDebug `json:"snooze_debug,omitempty"`

type StarAddedEvent

type StarAddedEvent starEvent

StarAddedEvent represents the Star added event

type StarRemovedEvent

type StarRemovedEvent starEvent

StarRemovedEvent represents the Star removed event

type StarredItem

type StarredItem Item

type StarsParameters

type StarsParameters struct {
	User  string
	Count int
	Page  int

func NewStarsParameters

func NewStarsParameters() StarsParameters

NewStarsParameters initialises StarsParameters with default values

type Team

type Team struct {
	ID     string `json:"id"`
	Name   string `json:"name"`
	Domain string `json:"domain"`

Team contains details about a team

type TeamDomainChangeEvent

type TeamDomainChangeEvent struct {
	Type   string `json:"type"`
	URL    string `json:"url"`
	Domain string `json:"domain"`

TeamDomainChangeEvent represents the Team domain change event

type TeamIdentity added in v0.1.0

type TeamIdentity struct {
	ID            string `json:"id"`
	Name          string `json:"name"`
	Domain        string `json:"domain"`
	Image34       string `json:"image_34"`
	Image44       string `json:"image_44"`
	Image68       string `json:"image_68"`
	Image88       string `json:"image_88"`
	Image102      string `json:"image_102"`
	Image132      string `json:"image_132"`
	Image230      string `json:"image_230"`
	ImageDefault  bool   `json:"image_default"`
	ImageOriginal string `json:"image_original"`

type TeamInfo added in v0.1.0

type TeamInfo struct {
	ID          string                 `json:"id"`
	Name        string                 `json:"name"`
	Domain      string                 `json:"domain"`
	EmailDomain string                 `json:"email_domain"`
	Icon        map[string]interface{} `json:"icon"`

type TeamJoinEvent

type TeamJoinEvent struct {
	Type string `json:"type"`
	User User   `json:"user"`

TeamJoinEvent represents the Team join event

type TeamMigrationStartedEvent

type TeamMigrationStartedEvent struct {
	Type string `json:"type"`

TeamMigrationStartedEvent represents the Team migration started event

type TeamPrefChangeEvent

type TeamPrefChangeEvent struct {
	Type  string   `json:"type"`
	Name  string   `json:"name,omitempty"`
	Value []string `json:"value,omitempty"`

TeamPrefChangeEvent represents the Team preference change event

type TeamRenameEvent

type TeamRenameEvent struct {
	Type           string `json:"type"`
	Name           string `json:"name,omitempty"`
	EventTimestamp string `json:"event_ts,omitempty"`

TeamRenameEvent represents the Team rename event

type TeamResponse added in v0.1.0

type TeamResponse struct {
	Team TeamInfo `json:"team"`

type Topic added in v0.1.0

type Topic struct {
	Value   string   `json:"value"`
	Creator string   `json:"creator"`
	LastSet JSONTime `json:"last_set"`

Topic contains information about the topic

type UnmarshallingErrorEvent added in v0.1.0

type UnmarshallingErrorEvent struct {
	ErrorObj error

UnmarshallingErrorEvent is used when there are issues deconstructing a response

func (UnmarshallingErrorEvent) Error added in v0.1.0

func (u UnmarshallingErrorEvent) Error() string

type User

type User struct {
	ID                string      `json:"id"`
	Name              string      `json:"name"`
	Deleted           bool        `json:"deleted"`
	Color             string      `json:"color"`
	RealName          string      `json:"real_name"`
	TZ                string      `json:"tz,omitempty"`
	TZLabel           string      `json:"tz_label"`
	TZOffset          int         `json:"tz_offset"`
	Profile           UserProfile `json:"profile"`
	IsBot             bool        `json:"is_bot"`
	IsAdmin           bool        `json:"is_admin"`
	IsOwner           bool        `json:"is_owner"`
	IsPrimaryOwner    bool        `json:"is_primary_owner"`
	IsRestricted      bool        `json:"is_restricted"`
	IsUltraRestricted bool        `json:"is_ultra_restricted"`
	Has2FA            bool        `json:"has_2fa"`
	HasFiles          bool        `json:"has_files"`
	Presence          string      `json:"presence"`

User contains all the information of a user

type UserChangeEvent

type UserChangeEvent struct {
	Type string `json:"type"`
	User User   `json:"user"`

UserChangeEvent represents the user change event

type UserDetails

type UserDetails struct {
	ID             string    `json:"id"`
	Name           string    `json:"name"`
	Created        JSONTime  `json:"created"`
	ManualPresence string    `json:"manual_presence"`
	Prefs          UserPrefs `json:"prefs"`

UserDetails contains user details coming in the initial response from StartRTM

type UserGroup added in v0.1.0

type UserGroup struct {
	ID          string         `json:"id"`
	TeamID      string         `json:"team_id"`
	IsUserGroup bool           `json:"is_usergroup"`
	Name        string         `json:"name"`
	Description string         `json:"description"`
	Handle      string         `json:"handle"`
	IsExternal  bool           `json:"is_external"`
	DateCreate  JSONTime       `json:"date_create"`
	DateUpdate  JSONTime       `json:"date_update"`
	DateDelete  JSONTime       `json:"date_delete"`
	AutoType    string         `json:"auto_type"`
	CreatedBy   string         `json:"created_by"`
	UpdatedBy   string         `json:"updated_by"`
	DeletedBy   string         `json:"deleted_by"`
	Prefs       UserGroupPrefs `json:"prefs"`
	UserCount   int            `json:"user_count"`

UserGroup contains all the information of a user group

type UserGroupPrefs added in v0.1.0

type UserGroupPrefs struct {
	Channels []string `json:"channels"`
	Groups   []string `json:"groups"`

UserGroupPrefs contains default channels and groups (private channels)

type UserIdentity added in v0.1.0

type UserIdentity struct {
	ID       string `json:"id"`
	Name     string `json:"name"`
	Email    string `json:"email"`
	Image24  string `json:"image_24"`
	Image32  string `json:"image_32"`
	Image48  string `json:"image_48"`
	Image72  string `json:"image_72"`
	Image192 string `json:"image_192"`
	Image512 string `json:"image_512"`

type UserIdentityResponse added in v0.1.0

type UserIdentityResponse struct {
	User UserIdentity `json:"user"`
	Team TeamIdentity `json:"team"`

type UserPrefs

type UserPrefs struct {

UserPrefs needs to be implemented

type UserPresence

type UserPresence struct {
	Presence        string   `json:"presence,omitempty"`
	Online          bool     `json:"online,omitempty"`
	AutoAway        bool     `json:"auto_away,omitempty"`
	ManualAway      bool     `json:"manual_away,omitempty"`
	ConnectionCount int      `json:"connection_count,omitempty"`
	LastActivity    JSONTime `json:"last_activity,omitempty"`

UserPresence contains details about a user online status

type UserProfile

type UserProfile struct {
	FirstName          string `json:"first_name"`
	LastName           string `json:"last_name"`
	RealName           string `json:"real_name"`
	RealNameNormalized string `json:"real_name_normalized"`
	Email              string `json:"email"`
	Skype              string `json:"skype"`
	Phone              string `json:"phone"`
	Image24            string `json:"image_24"`
	Image32            string `json:"image_32"`
	Image48            string `json:"image_48"`
	Image72            string `json:"image_72"`
	Image192           string `json:"image_192"`
	ImageOriginal      string `json:"image_original"`
	Title              string `json:"title"`
	BotID              string `json:"bot_id,omitempty"`
	ApiAppID           string `json:"api_app_id,omitempty"`
	StatusText         string `json:"status_text,omitempty"`
	StatusEmoji        string `json:"status_emoji,omitempty"`

UserProfile contains all the information details of a given user

type UserSetPhotoParams added in v0.1.0

type UserSetPhotoParams struct {
	CropX int
	CropY int
	CropW int

func NewUserSetPhotoParams added in v0.1.0

func NewUserSetPhotoParams() UserSetPhotoParams

type UserTypingEvent

type UserTypingEvent struct {
	Type    string `json:"type"`
	User    string `json:"user"`
	Channel string `json:"channel"`

UserTypingEvent represents the user typing event

type WebError added in v0.1.0

type WebError string

func (WebError) Error added in v0.1.0

func (s WebError) Error() string

type WebResponse added in v0.1.0

type WebResponse struct {
	Ok    bool      `json:"ok"`
	Error *WebError `json:"error"`


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL