From a594d3a906af36b42c1e865c14f29bdd84e49692 Mon Sep 17 00:00:00 2001 From: Vaidas Jablonskis Date: Thu, 4 Jul 2024 13:03:09 +0300 Subject: [PATCH] Switch to slack upload file v2 api --- go.mod | 2 +- go.sum | 4 ++-- pkg/bot/slack_cloud.go | 28 +++++++++------------------- pkg/bot/slack_socket.go | 31 +++++++++---------------------- 4 files changed, 21 insertions(+), 44 deletions(-) diff --git a/go.mod b/go.mod index 76fee5b75..65ab80163 100644 --- a/go.mod +++ b/go.mod @@ -50,7 +50,7 @@ require ( github.com/segmentio/analytics-go v3.1.0+incompatible github.com/sha1sum/aws_signing_client v0.0.0-20200229211254-f7815c59d5c1 github.com/sirupsen/logrus v1.9.3 - github.com/slack-go/slack v0.12.2 + github.com/slack-go/slack v0.13.0 github.com/sourcegraph/conc v0.3.0 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index 7ad8abd7f..aa8dc7015 100644 --- a/go.sum +++ b/go.sum @@ -1068,8 +1068,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/slack-go/slack v0.12.2 h1:x3OppyMyGIbbiyFhsBmpf9pwkUzMhthJMRNmNlA4LaQ= -github.com/slack-go/slack v0.12.2/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= +github.com/slack-go/slack v0.13.0 h1:7my/pR2ubZJ9912p9FtvALYpbt0cQPAqkRy2jaSI1PQ= +github.com/slack-go/slack v0.13.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= diff --git a/pkg/bot/slack_cloud.go b/pkg/bot/slack_cloud.go index 7917ada73..de10bb4fb 100644 --- a/pkg/bot/slack_cloud.go +++ b/pkg/bot/slack_cloud.go @@ -74,7 +74,8 @@ func NewCloudSlack(log logrus.FieldLogger, cfg config.CloudSlack, clusterName string, executorFactory ExecutorFactory, - reporter AnalyticsCommandReporter) (*CloudSlack, error) { + reporter AnalyticsCommandReporter, +) (*CloudSlack, error) { client := slack.New(cfg.Token) _, err := client.AuthTest() @@ -551,10 +552,8 @@ func (b *CloudSlack) send(ctx context.Context, event slackMessage, resp interact } // Upload message as a file if too long - var file *slack.File - var err error if len(markdown) >= slackMaxMessageSize { - file, err = b.uploadFileToSlack(ctx, event, resp) + _, err := b.uploadFileToSlack(ctx, event, resp) if err != nil { return err } @@ -596,7 +595,7 @@ func (b *CloudSlack) send(ctx context.Context, event slackMessage, resp interact return fmt.Errorf("while posting Slack message visible only to user: %w", err) } } else { - if ts := b.getThreadOptionIfNeeded(resp, event, file); ts != nil { + if ts := b.getThreadOptionIfNeeded(resp, event); ts != nil { options = append(options, ts) } @@ -609,17 +608,17 @@ func (b *CloudSlack) send(ctx context.Context, event slackMessage, resp interact return nil } -func (b *CloudSlack) uploadFileToSlack(ctx context.Context, event slackMessage, resp interactive.CoreMessage) (*slack.File, error) { - params := slack.FileUploadParameters{ +func (b *CloudSlack) uploadFileToSlack(ctx context.Context, event slackMessage, resp interactive.CoreMessage) (*slack.FileSummary, error) { + params := slack.UploadFileV2Parameters{ Filename: "Response.txt", Title: "Response.txt", InitialComment: resp.Description, Content: interactive.MessageToPlaintext(resp, interactive.NewlineFormatter), - Channels: []string{event.Channel}, + Channel: event.Channel, ThreadTimestamp: b.resolveMessageTimestamp(resp, event), } - file, err := b.client.UploadFileContext(ctx, params) + file, err := b.client.UploadFileV2Context(ctx, params) if err != nil { return nil, fmt.Errorf("while uploading file: %w", err) } @@ -645,19 +644,10 @@ func (b *CloudSlack) BotName() string { return fmt.Sprintf("<@%s>", b.botID) } -func (b *CloudSlack) getThreadOptionIfNeeded(resp interactive.CoreMessage, event slackMessage, file *slack.File) slack.MsgOption { - if file != nil { - // If the message was already as a file attachment, reply it a given thread - for _, share := range file.Shares.Public { - if len(share) >= 1 && share[0].Ts != "" { - return slack.MsgOptionTS(share[0].Ts) - } - } - } +func (b *CloudSlack) getThreadOptionIfNeeded(resp interactive.CoreMessage, event slackMessage) slack.MsgOption { if ts := b.resolveMessageTimestamp(resp, event); ts != "" { return slack.MsgOptionTS(ts) } - return nil } diff --git a/pkg/bot/slack_socket.go b/pkg/bot/slack_socket.go index e5b95a4db..d5b41d6da 100644 --- a/pkg/bot/slack_socket.go +++ b/pkg/bot/slack_socket.go @@ -530,10 +530,8 @@ func (b *SocketSlack) send(ctx context.Context, event slackMessage, in interacti } // Upload message as a file if too long - var file *slack.File - var err error if len(markdown) >= slackMaxMessageSize { - file, err = uploadFileToSlack(ctx, event.Channel, resp, b.client, event.ThreadTimeStamp) + _, err := uploadFileToSlack(ctx, event.Channel, resp, b.client, event.ThreadTimeStamp) if err != nil { return err } @@ -563,7 +561,7 @@ func (b *SocketSlack) send(ctx context.Context, event slackMessage, in interacti // if the message should be sent in thread, but thread is not yet started, then use the root message timestamp event.ThreadTimeStamp = event.RootMessageTimeStamp } - if ts := b.getThreadOptionIfNeeded(event, file); ts != nil { + if ts := b.getThreadOptionIfNeeded(event); ts != nil { options = append(options, ts) } @@ -585,7 +583,7 @@ func (b *SocketSlack) send(ctx context.Context, event slackMessage, in interacti options = append(options, slack.MsgOptionTS(resp.Message.ParentActivityID)) } - _, _, err = b.client.PostMessageContext(ctx, id, options...) + _, _, err := b.client.PostMessageContext(ctx, id, options...) if err != nil { return fmt.Errorf("while posting Slack message: %w", slackError(err, event.Channel)) } @@ -706,23 +704,12 @@ func resolveBlockActionCommand(act slack.BlockAction) (string, command.Origin) { return cmd, cmdOrigin } -func (b *SocketSlack) getThreadOptionIfNeeded(event slackMessage, file *slack.File) slack.MsgOption { - //if the message is from thread then add an option to return the response to the thread +func (b *SocketSlack) getThreadOptionIfNeeded(event slackMessage) slack.MsgOption { + // if the message is from thread then add an option to return the response to the thread if event.ThreadTimeStamp != "" { return slack.MsgOptionTS(event.ThreadTimeStamp) } - if file == nil { - return nil - } - - // If the message was already as a file attachment, reply it a given thread - for _, share := range file.Shares.Public { - if len(share) >= 1 && share[0].Ts != "" { - return slack.MsgOptionTS(share[0].Ts) - } - } - return nil } @@ -763,17 +750,17 @@ func (b *SocketSlack) GetStatus() health.PlatformStatus { } } -func uploadFileToSlack(ctx context.Context, channel string, resp interactive.CoreMessage, client *slack.Client, ts string) (*slack.File, error) { - params := slack.FileUploadParameters{ +func uploadFileToSlack(ctx context.Context, channel string, resp interactive.CoreMessage, client *slack.Client, ts string) (*slack.FileSummary, error) { + params := slack.UploadFileV2Parameters{ Filename: "Response.txt", Title: "Response.txt", InitialComment: resp.Description, Content: interactive.MessageToPlaintext(resp, interactive.NewlineFormatter), - Channels: []string{channel}, + Channel: channel, ThreadTimestamp: ts, } - file, err := client.UploadFileContext(ctx, params) + file, err := client.UploadFileV2Context(ctx, params) if err != nil { return nil, fmt.Errorf("while uploading file: %w", err) }