summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/slack-go/slack
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/slack-go/slack')
-rw-r--r--vendor/github.com/slack-go/slack/chat.go19
-rw-r--r--vendor/github.com/slack-go/slack/conversation.go18
-rw-r--r--vendor/github.com/slack-go/slack/messages.go5
-rw-r--r--vendor/github.com/slack-go/slack/metadata.go7
-rw-r--r--vendor/github.com/slack-go/slack/usergroups.go69
-rw-r--r--vendor/github.com/slack-go/slack/users.go17
-rw-r--r--vendor/github.com/slack-go/slack/websocket_managed_conn.go27
-rw-r--r--vendor/github.com/slack-go/slack/workflow_step_execute.go85
8 files changed, 224 insertions, 23 deletions
diff --git a/vendor/github.com/slack-go/slack/chat.go b/vendor/github.com/slack-go/slack/chat.go
index 34848d15..4448e9f4 100644
--- a/vendor/github.com/slack-go/slack/chat.go
+++ b/vendor/github.com/slack-go/slack/chat.go
@@ -64,6 +64,9 @@ type PostMessageParameters struct {
// chat.postEphemeral support
Channel string `json:"channel"`
User string `json:"user"`
+
+ // chat metadata support
+ MetaData SlackMetadata `json:"metadata"`
}
// NewPostMessageParameters provides an instance of PostMessageParameters with all the sane default values set
@@ -285,6 +288,7 @@ type sendConfig struct {
endpoint string
values url.Values
attachments []Attachment
+ metadata SlackMetadata
blocks Blocks
responseType string
replaceOriginal bool
@@ -306,6 +310,7 @@ func (t sendConfig) BuildRequestContext(ctx context.Context, token, channelID st
endpoint: t.endpoint,
values: t.values,
attachments: t.attachments,
+ metadata: t.metadata,
blocks: t.blocks,
responseType: t.responseType,
replaceOriginal: t.replaceOriginal,
@@ -336,6 +341,7 @@ type responseURLSender struct {
endpoint string
values url.Values
attachments []Attachment
+ metadata SlackMetadata
blocks Blocks
responseType string
replaceOriginal bool
@@ -352,6 +358,7 @@ func (t responseURLSender) BuildRequestContext(ctx context.Context) (*http.Reque
Timestamp: t.values.Get("ts"),
Attachments: t.attachments,
Blocks: t.blocks,
+ Metadata: t.metadata,
ResponseType: t.responseType,
ReplaceOriginal: t.replaceOriginal,
DeleteOriginal: t.deleteOriginal,
@@ -662,6 +669,18 @@ func MsgOptionIconEmoji(iconEmoji string) MsgOption {
}
}
+// MsgOptionMetadata sets message metadata
+func MsgOptionMetadata(metadata SlackMetadata) MsgOption {
+ return func(config *sendConfig) error {
+ config.metadata = metadata
+ meta, err := json.Marshal(metadata)
+ if err == nil {
+ config.values.Set("metadata", string(meta))
+ }
+ return err
+ }
+}
+
// UnsafeMsgOptionEndpoint deliver the message to the specified endpoint.
// NOTE: USE AT YOUR OWN RISK: No issues relating to the use of this Option
// will be supported by the library, it is subject to change without notice that
diff --git a/vendor/github.com/slack-go/slack/conversation.go b/vendor/github.com/slack-go/slack/conversation.go
index 29936260..e523716c 100644
--- a/vendor/github.com/slack-go/slack/conversation.go
+++ b/vendor/github.com/slack-go/slack/conversation.go
@@ -571,12 +571,13 @@ func (api *Client) JoinConversationContext(ctx context.Context, channelID string
}
type GetConversationHistoryParameters struct {
- ChannelID string
- Cursor string
- Inclusive bool
- Latest string
- Limit int
- Oldest string
+ ChannelID string
+ Cursor string
+ Inclusive bool
+ Latest string
+ Limit int
+ Oldest string
+ IncludeAllMetadata bool
}
type GetConversationHistoryResponse struct {
@@ -615,6 +616,11 @@ func (api *Client) GetConversationHistoryContext(ctx context.Context, params *Ge
if params.Oldest != "" {
values.Add("oldest", params.Oldest)
}
+ if params.IncludeAllMetadata {
+ values.Add("include_all_metadata", "1")
+ } else {
+ values.Add("include_all_metadata", "0")
+ }
response := GetConversationHistoryResponse{}
diff --git a/vendor/github.com/slack-go/slack/messages.go b/vendor/github.com/slack-go/slack/messages.go
index 2cc31d5b..33340456 100644
--- a/vendor/github.com/slack-go/slack/messages.go
+++ b/vendor/github.com/slack-go/slack/messages.go
@@ -129,8 +129,13 @@ type Msg struct {
ReplaceOriginal bool `json:"replace_original"`
DeleteOriginal bool `json:"delete_original"`
+ // metadata
+ Metadata SlackMetadata `json:"metadata,omitempty"`
+
// Block type Message
Blocks Blocks `json:"blocks,omitempty"`
+ // permalink
+ Permalink string `json:"permalink,omitempty"`
}
const (
diff --git a/vendor/github.com/slack-go/slack/metadata.go b/vendor/github.com/slack-go/slack/metadata.go
new file mode 100644
index 00000000..a8c06504
--- /dev/null
+++ b/vendor/github.com/slack-go/slack/metadata.go
@@ -0,0 +1,7 @@
+package slack
+
+// SlackMetadata https://api.slack.com/reference/metadata
+type SlackMetadata struct {
+ EventType string `json:"event_type"`
+ EventPayload map[string]interface{} `json:"event_payload"`
+}
diff --git a/vendor/github.com/slack-go/slack/usergroups.go b/vendor/github.com/slack-go/slack/usergroups.go
index 9417f817..c5d7a176 100644
--- a/vendor/github.com/slack-go/slack/usergroups.go
+++ b/vendor/github.com/slack-go/slack/usergroups.go
@@ -183,32 +183,77 @@ func (api *Client) GetUserGroupsContext(ctx context.Context, options ...GetUserG
return response.UserGroups, nil
}
+// UpdateUserGroupsOption options for the UpdateUserGroup method call.
+type UpdateUserGroupsOption func(*UpdateUserGroupsParams)
+
+// UpdateUserGroupsOptionName change the name of the User Group (default: empty, so it's no-op)
+func UpdateUserGroupsOptionName(name string) UpdateUserGroupsOption {
+ return func(params *UpdateUserGroupsParams) {
+ params.Name = name
+ }
+}
+
+// UpdateUserGroupsOptionHandle change the handle of the User Group (default: empty, so it's no-op)
+func UpdateUserGroupsOptionHandle(handle string) UpdateUserGroupsOption {
+ return func(params *UpdateUserGroupsParams) {
+ params.Handle = handle
+ }
+}
+
+// UpdateUserGroupsOptionDescription change the description of the User Group. (default: nil, so it's no-op)
+func UpdateUserGroupsOptionDescription(description *string) UpdateUserGroupsOption {
+ return func(params *UpdateUserGroupsParams) {
+ params.Description = description
+ }
+}
+
+// UpdateUserGroupsOptionChannels change the default channels of the User Group. (default: unspecified, so it's no-op)
+func UpdateUserGroupsOptionChannels(channels []string) UpdateUserGroupsOption {
+ return func(params *UpdateUserGroupsParams) {
+ params.Channels = &channels
+ }
+}
+
+// UpdateUserGroupsParams contains arguments for UpdateUserGroup method call
+type UpdateUserGroupsParams struct {
+ Name string
+ Handle string
+ Description *string
+ Channels *[]string
+}
+
// UpdateUserGroup will update an existing user group
-func (api *Client) UpdateUserGroup(userGroup UserGroup) (UserGroup, error) {
- return api.UpdateUserGroupContext(context.Background(), userGroup)
+func (api *Client) UpdateUserGroup(userGroupID string, options ...UpdateUserGroupsOption) (UserGroup, error) {
+ return api.UpdateUserGroupContext(context.Background(), userGroupID, options...)
}
// UpdateUserGroupContext will update an existing user group with a custom context
-func (api *Client) UpdateUserGroupContext(ctx context.Context, userGroup UserGroup) (UserGroup, error) {
+func (api *Client) UpdateUserGroupContext(ctx context.Context, userGroupID string, options ...UpdateUserGroupsOption) (UserGroup, error) {
+ params := UpdateUserGroupsParams{}
+
+ for _, opt := range options {
+ opt(&params)
+ }
+
values := url.Values{
"token": {api.token},
- "usergroup": {userGroup.ID},
+ "usergroup": {userGroupID},
}
- if userGroup.Name != "" {
- values["name"] = []string{userGroup.Name}
+ if params.Name != "" {
+ values["name"] = []string{params.Name}
}
- if userGroup.Handle != "" {
- values["handle"] = []string{userGroup.Handle}
+ if params.Handle != "" {
+ values["handle"] = []string{params.Handle}
}
- if userGroup.Description != "" {
- values["description"] = []string{userGroup.Description}
+ if params.Description != nil {
+ values["description"] = []string{*params.Description}
}
- if len(userGroup.Prefs.Channels) > 0 {
- values["channels"] = []string{strings.Join(userGroup.Prefs.Channels, ",")}
+ if params.Channels != nil {
+ values["channels"] = []string{strings.Join(*params.Channels, ",")}
}
response, err := api.userGroupRequest(ctx, "usergroups.update", values)
diff --git a/vendor/github.com/slack-go/slack/users.go b/vendor/github.com/slack-go/slack/users.go
index 87311569..d22b44f8 100644
--- a/vendor/github.com/slack-go/slack/users.go
+++ b/vendor/github.com/slack-go/slack/users.go
@@ -292,6 +292,13 @@ func GetUsersOptionPresence(n bool) GetUsersOption {
}
}
+// GetUsersOptionTeamID include team Id
+func GetUsersOptionTeamID(teamId string) GetUsersOption {
+ return func(p *UserPagination) {
+ p.teamId = teamId
+ }
+}
+
func newUserPagination(c *Client, options ...GetUsersOption) (up UserPagination) {
up = UserPagination{
c: c,
@@ -310,6 +317,7 @@ type UserPagination struct {
Users []User
limit int
presence bool
+ teamId string
previousResp *ResponseMetadata
c *Client
}
@@ -344,6 +352,7 @@ func (t UserPagination) Next(ctx context.Context) (_ UserPagination, err error)
"presence": {strconv.FormatBool(t.presence)},
"token": {t.c.token},
"cursor": {t.previousResp.Cursor},
+ "team_id": {t.teamId},
"include_locale": {strconv.FormatBool(true)},
}
@@ -364,13 +373,13 @@ func (api *Client) GetUsersPaginated(options ...GetUsersOption) UserPagination {
}
// GetUsers returns the list of users (with their detailed information)
-func (api *Client) GetUsers() ([]User, error) {
- return api.GetUsersContext(context.Background())
+func (api *Client) GetUsers(options ...GetUsersOption) ([]User, error) {
+ return api.GetUsersContext(context.Background(), options...)
}
// GetUsersContext returns the list of users (with their detailed information) with a custom context
-func (api *Client) GetUsersContext(ctx context.Context) (results []User, err error) {
- p := api.GetUsersPaginated()
+func (api *Client) GetUsersContext(ctx context.Context, options ...GetUsersOption) (results []User, err error) {
+ p := api.GetUsersPaginated(options...)
for err == nil {
p, err = p.Next(ctx)
if err == nil {
diff --git a/vendor/github.com/slack-go/slack/websocket_managed_conn.go b/vendor/github.com/slack-go/slack/websocket_managed_conn.go
index 14dea219..f107b2a4 100644
--- a/vendor/github.com/slack-go/slack/websocket_managed_conn.go
+++ b/vendor/github.com/slack-go/slack/websocket_managed_conn.go
@@ -16,6 +16,31 @@ import (
"github.com/slack-go/slack/internal/timex"
)
+// UnmappedError represents error occurred when there is no mapping between given event name
+// and corresponding Go struct.
+type UnmappedError struct {
+ // EventType returns event type name.
+ EventType string
+ // RawEvent returns raw event body.
+ RawEvent json.RawMessage
+
+ ctxMsg string
+}
+
+// NewUnmappedError returns new UnmappedError instance.
+func NewUnmappedError(ctxMsg, eventType string, raw json.RawMessage) *UnmappedError {
+ return &UnmappedError{
+ ctxMsg: ctxMsg,
+ EventType: eventType,
+ RawEvent: raw,
+ }
+}
+
+// Error returns human-readable error message.
+func (u UnmappedError) Error() string {
+ return fmt.Sprintf("%s: Received unmapped event %q", u.ctxMsg, u.EventType)
+}
+
// 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
@@ -474,7 +499,7 @@ func (rtm *RTM) handleEvent(typeStr string, event json.RawMessage) {
v, exists := EventMapping[typeStr]
if !exists {
rtm.Debugf("RTM Error - received unmapped event %q: %s\n", typeStr, string(event))
- err := fmt.Errorf("RTM Error: Received unmapped event %q", typeStr)
+ err := NewUnmappedError("RTM Error", typeStr, event)
rtm.IncomingEvents <- RTMEvent{"unmarshalling_error", &UnmarshallingErrorEvent{err}}
return
}
diff --git a/vendor/github.com/slack-go/slack/workflow_step_execute.go b/vendor/github.com/slack-go/slack/workflow_step_execute.go
new file mode 100644
index 00000000..18516f23
--- /dev/null
+++ b/vendor/github.com/slack-go/slack/workflow_step_execute.go
@@ -0,0 +1,85 @@
+package slack
+
+import (
+ "context"
+ "encoding/json"
+)
+
+type (
+ WorkflowStepCompletedRequest struct {
+ WorkflowStepExecuteID string `json:"workflow_step_execute_id"`
+ Outputs map[string]string `json:"outputs"`
+ }
+
+ WorkflowStepFailedRequest struct {
+ WorkflowStepExecuteID string `json:"workflow_step_execute_id"`
+ Error struct {
+ Message string `json:"message"`
+ } `json:"error"`
+ }
+)
+
+type WorkflowStepCompletedRequestOption func(opt WorkflowStepCompletedRequest) error
+
+func WorkflowStepCompletedRequestOptionOutput(outputs map[string]string) WorkflowStepCompletedRequestOption {
+ return func(opt WorkflowStepCompletedRequest) error {
+ if len(outputs) > 0 {
+ opt.Outputs = outputs
+ }
+ return nil
+ }
+}
+
+// WorkflowStepCompleted indicates step is completed
+func (api *Client) WorkflowStepCompleted(workflowStepExecuteID string, options ...WorkflowStepCompletedRequestOption) error {
+ // More information: https://api.slack.com/methods/workflows.stepCompleted
+ r := WorkflowStepCompletedRequest{
+ WorkflowStepExecuteID: workflowStepExecuteID,
+ }
+ for _, option := range options {
+ option(r)
+ }
+
+ endpoint := api.endpoint + "workflows.stepCompleted"
+ jsonData, err := json.Marshal(r)
+ if err != nil {
+ return err
+ }
+
+ response := &SlackResponse{}
+ if err := postJSON(context.Background(), api.httpclient, endpoint, api.token, jsonData, response, api); err != nil {
+ return err
+ }
+
+ if !response.Ok {
+ return response.Err()
+ }
+
+ return nil
+}
+
+// WorkflowStepFailed indicates step is failed
+func (api *Client) WorkflowStepFailed(workflowStepExecuteID string, errorMessage string) error {
+ // More information: https://api.slack.com/methods/workflows.stepFailed
+ r := WorkflowStepFailedRequest{
+ WorkflowStepExecuteID: workflowStepExecuteID,
+ }
+ r.Error.Message = errorMessage
+
+ endpoint := api.endpoint + "workflows.stepFailed"
+ jsonData, err := json.Marshal(r)
+ if err != nil {
+ return err
+ }
+
+ response := &SlackResponse{}
+ if err := postJSON(context.Background(), api.httpclient, endpoint, api.token, jsonData, response, api); err != nil {
+ return err
+ }
+
+ if !response.Ok {
+ return response.Err()
+ }
+
+ return nil
+}