1package slack 2 3import ( 4 "encoding/json" 5 "fmt" 6) 7 8// AckMessage is used for messages received in reply to other messages 9type AckMessage struct { 10 ReplyTo int `json:"reply_to"` 11 Timestamp string `json:"ts"` 12 Text string `json:"text"` 13 RTMResponse 14} 15 16// RTMResponse encapsulates response details as returned by the Slack API 17type RTMResponse struct { 18 Ok bool `json:"ok"` 19 Error *RTMError `json:"error"` 20} 21 22// RTMError encapsulates error information as returned by the Slack API 23type RTMError struct { 24 Code int 25 Msg string 26} 27 28func (s RTMError) Error() string { 29 return fmt.Sprintf("Code %d - %s", s.Code, s.Msg) 30} 31 32// MessageEvent represents a Slack Message (used as the event type for an incoming message) 33type MessageEvent Message 34 35// RTMEvent is the main wrapper. You will find all the other messages attached 36type RTMEvent struct { 37 Type string 38 Data interface{} 39} 40 41// HelloEvent represents the hello event 42type HelloEvent struct{} 43 44// PresenceChangeEvent represents the presence change event 45type PresenceChangeEvent struct { 46 Type string `json:"type"` 47 Presence string `json:"presence"` 48 User string `json:"user"` 49 Users []string `json:"users"` 50} 51 52// UserTypingEvent represents the user typing event 53type UserTypingEvent struct { 54 Type string `json:"type"` 55 User string `json:"user"` 56 Channel string `json:"channel"` 57} 58 59// PrefChangeEvent represents a user preferences change event 60type PrefChangeEvent struct { 61 Type string `json:"type"` 62 Name string `json:"name"` 63 Value json.RawMessage `json:"value"` 64} 65 66// ManualPresenceChangeEvent represents the manual presence change event 67type ManualPresenceChangeEvent struct { 68 Type string `json:"type"` 69 Presence string `json:"presence"` 70} 71 72// UserChangeEvent represents the user change event 73type UserChangeEvent struct { 74 Type string `json:"type"` 75 User User `json:"user"` 76} 77 78// EmojiChangedEvent represents the emoji changed event 79type EmojiChangedEvent struct { 80 Type string `json:"type"` 81 SubType string `json:"subtype"` 82 Name string `json:"name"` 83 Names []string `json:"names"` 84 Value string `json:"value"` 85 EventTimestamp string `json:"event_ts"` 86} 87 88// CommandsChangedEvent represents the commands changed event 89type CommandsChangedEvent struct { 90 Type string `json:"type"` 91 EventTimestamp string `json:"event_ts"` 92} 93 94// EmailDomainChangedEvent represents the email domain changed event 95type EmailDomainChangedEvent struct { 96 Type string `json:"type"` 97 EventTimestamp string `json:"event_ts"` 98 EmailDomain string `json:"email_domain"` 99} 100 101// BotAddedEvent represents the bot added event 102type BotAddedEvent struct { 103 Type string `json:"type"` 104 Bot Bot `json:"bot"` 105} 106 107// BotChangedEvent represents the bot changed event 108type BotChangedEvent struct { 109 Type string `json:"type"` 110 Bot Bot `json:"bot"` 111} 112 113// AccountsChangedEvent represents the accounts changed event 114type AccountsChangedEvent struct { 115 Type string `json:"type"` 116} 117 118// ReconnectUrlEvent represents the receiving reconnect url event 119type ReconnectUrlEvent struct { 120 Type string `json:"type"` 121 URL string `json:"url"` 122} 123 124// MemberJoinedChannelEvent, a user joined a public or private channel 125type MemberJoinedChannelEvent struct { 126 Type string `json:"type"` 127 User string `json:"user"` 128 Channel string `json:"channel"` 129 ChannelType string `json:"channel_type"` 130 Team string `json:"team"` 131 Inviter string `json:"inviter"` 132} 133 134// MemberLeftChannelEvent a user left a public or private channel 135type MemberLeftChannelEvent struct { 136 Type string `json:"type"` 137 User string `json:"user"` 138 Channel string `json:"channel"` 139 ChannelType string `json:"channel_type"` 140 Team string `json:"team"` 141} 142