Documentation
¶
Index ¶
- Variables
- func GetBotMessageForTesting() string
- func GetTokenFromTeamId(a *App, teamID string) string
- func IsBotMessage(event EventMessage) bool
- func ParseEvent(data []byte) (interface{}, error)
- func SendMessage(postMessage ChatPostMessage)
- type App
- type BotProfile
- type ChatPostMessage
- type EventChallenge
- type EventMessage
- type EventMessageType
- type HttpClient
- type Response
- type ResponseType
- type SlackRequestVerifier
Constants ¶
This section is empty.
Variables ¶
var ProdSet = wire.NewSet( ProvideSlackApp, security.ProdSet, wire.Bind(new(SlackRequestVerifier), new(*security.Security)), wire.InterfaceValue(new(HttpClient), http.DefaultClient), )
Functions ¶
func GetBotMessageForTesting ¶
func GetBotMessageForTesting() string
GetBotMessageForTesting returns a mock bot message (JSON).
func GetTokenFromTeamId ¶
func IsBotMessage ¶
func IsBotMessage(event EventMessage) bool
IsBotMessage returns true if event is created by a bot.
func ParseEvent ¶
ParseEvent will try parsing slack events and return the first matching struct
Possible event types - EventChallenge
It will return map[string]interface{} if no type is matched
func SendMessage ¶
func SendMessage(postMessage ChatPostMessage)
SendMessage sends to slack
Documentation: https://api.slack.com/methods/chat.postMessage
Types ¶
type App ¶
type App struct { HttpClient HttpClient MongoClient *mongo.Client // contains filtered or unexported fields }
App manages Global Application State
func ProvideSlackApp ¶
func ProvideSlackApp(config *config.Config, httpClient HttpClient, mongoClient *mongo.Client, verifier SlackRequestVerifier) *App
func ProvideTestApp ¶
func ProvideTestApp(httpClient HttpClient, mongoClient *mongo.Client) *App
func (*App) CommandHandler ¶
func (app *App) CommandHandler(w http.ResponseWriter, r *http.Request)
CommandHandler handles slack slash command
ENDPOINT /api/slack/command
Example Usage /time 2018-12-31 21:40 PST => 2019-01-01 14:40 KST
func (*App) EventHandler ¶
func (app *App) EventHandler(w http.ResponseWriter, r *http.Request)
EventHandler responds to the Slack Event.
When Slack is first connected, it sends "Challenge". We need to return the challenge code right away to be connected.
func (*App) GetOauthCollection ¶
func (app *App) GetOauthCollection() *mongo.Collection
func (*App) OauthHandler ¶
func (app *App) OauthHandler(writer http.ResponseWriter, request *http.Request)
type BotProfile ¶
type BotProfile struct { ID string `json:"id"` Deleted bool `json:"deleted"` Name string `json:"name"` Updated int `json:"updated"` AppID string `json:"app_id"` Icons struct { Image36 string `json:"image_36"` Image48 string `json:"image_48"` Image72 string `json:"image_72"` } `json:"icons"` TeamID string `json:"team_id"` }
type ChatPostMessage ¶
type ChatPostMessage struct { Token string `json:"token"` Channel string `json:"channel"` Text string `json:"text"` Attachments []interface{} `json:"attchments,omitempty"` ThreadTs string `json:"thread_ts,omitempty"` Mrkdown bool `json:"mrkdown,omitempty"` AsUser bool `json:"as_user,omitempty"` }
ChatPostMessage is a struct sent to Slack
type EventChallenge ¶
type EventChallenge struct { Token string `json:"token"` Challenge string `json:"challenge"` Type string `json:"type"` }
EventChallenge is the first event sent when registering the app
The app should return challenge right away
type EventMessage ¶
type EventMessage struct { Token string `json:"token"` TeamID string `json:"team_id"` APIAppID string `json:"api_app_id"` Event EventMessageType `json:"event"` Type string `json:"type"` EventID string `json:"event_id"` EventTime int `json:"event_time"` AuthedUsers []string `json:"authed_users"` }
EventMessage is a struct sent by Slack
type EventMessageType ¶
type EventMessageType struct { ClientMsgID string `json:"client_msg_id"` Type string `json:"type"` Text string `json:"text"` User string `json:"user"` Ts string `json:"ts"` Team string `json:"team"` // Only filled when the message is from a bot. BotID string `json:"bot_id"` BotProfile *BotProfile `json:"bot_profile,omitempty"` // (optional) if this field exists, then it's a thread reply ThreadTs string `json:"thread_ts,omitempty"` // (optional) if this field exists, then it's a thread reply ParentUserID string `json:"parent_user_id,omitempty"` Channel string `json:"channel"` EventTs string `json:"event_ts"` ChannelType string `json:"channel_type"` }
EventMessageType holds the information of message type
type Response ¶
type Response struct { Text string `json:"text"` ResponseType ResponseType `json:"response_type,omitempty"` }
Response is a Slack Response struct
type ResponseType ¶
type ResponseType string
ResponseType is a type of slack message type
const ( // InChannel = everyone in the channel can view the message InChannel ResponseType = "in_channel" // Ephemeral = only the person who triggered the command can view the message Ephemeral ResponseType = "ephemeral" )