@@ -295,17 +295,7 @@ func (t *Slack) handleChannelMessage(
|
|||||||
|
|
||||||
//res.Response = githubmarkdownconvertergo.Slack(res.Response)
|
//res.Response = githubmarkdownconvertergo.Slack(res.Response)
|
||||||
|
|
||||||
_, _, err := api.PostMessage(ev.Channel,
|
replyWithPostMessage(res.Response, api, ev, postMessageParams, res)
|
||||||
slack.MsgOptionLinkNames(true),
|
|
||||||
slack.MsgOptionEnableLinkUnfurl(),
|
|
||||||
slack.MsgOptionText(res.Response, true),
|
|
||||||
slack.MsgOptionPostMessageParameters(postMessageParams),
|
|
||||||
slack.MsgOptionAttachments(generateAttachmentsFromJobResponse(res)...),
|
|
||||||
// slack.MsgOptionTS(ts),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
xlog.Error(fmt.Sprintf("Error posting message: %v", err))
|
|
||||||
}
|
|
||||||
|
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
@@ -321,6 +311,118 @@ func encodeImageFromURL(imageBytes bytes.Buffer) (string, error) {
|
|||||||
return base64Image, nil
|
return base64Image, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SplitText splits a long text into chunks of a specified maximum length without truncating words.
|
||||||
|
func splitText(text string, maxLen int) []string {
|
||||||
|
if len(text) <= maxLen {
|
||||||
|
return []string{text}
|
||||||
|
}
|
||||||
|
|
||||||
|
var chunks []string
|
||||||
|
words := strings.Fields(text) // Splitting the text into words
|
||||||
|
var chunk string
|
||||||
|
|
||||||
|
for _, word := range words {
|
||||||
|
if len(chunk)+len(word)+1 > maxLen { // +1 for space
|
||||||
|
chunks = append(chunks, chunk)
|
||||||
|
chunk = word
|
||||||
|
} else {
|
||||||
|
if chunk != "" {
|
||||||
|
chunk += " "
|
||||||
|
}
|
||||||
|
chunk += word
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if chunk != "" {
|
||||||
|
chunks = append(chunks, chunk)
|
||||||
|
}
|
||||||
|
|
||||||
|
return chunks
|
||||||
|
}
|
||||||
|
|
||||||
|
func replyWithPostMessage(finalResponse string, api *slack.Client, ev *slackevents.MessageEvent, postMessageParams slack.PostMessageParameters, res *types.JobResult) {
|
||||||
|
if len(finalResponse) > 4000 {
|
||||||
|
// split response in multiple messages, and update the first
|
||||||
|
|
||||||
|
messages := splitText(finalResponse, 4000)
|
||||||
|
|
||||||
|
for i, message := range messages {
|
||||||
|
if i == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
_, _, err := api.PostMessage(ev.Channel,
|
||||||
|
slack.MsgOptionLinkNames(true),
|
||||||
|
slack.MsgOptionEnableLinkUnfurl(),
|
||||||
|
slack.MsgOptionText(message, true),
|
||||||
|
slack.MsgOptionPostMessageParameters(postMessageParams),
|
||||||
|
slack.MsgOptionAttachments(generateAttachmentsFromJobResponse(res)...),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
xlog.Error(fmt.Sprintf("Error posting message: %v", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_, _, err := api.PostMessage(ev.Channel,
|
||||||
|
slack.MsgOptionLinkNames(true),
|
||||||
|
slack.MsgOptionEnableLinkUnfurl(),
|
||||||
|
slack.MsgOptionText(res.Response, true),
|
||||||
|
slack.MsgOptionPostMessageParameters(postMessageParams),
|
||||||
|
slack.MsgOptionAttachments(generateAttachmentsFromJobResponse(res)...),
|
||||||
|
// slack.MsgOptionTS(ts),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
xlog.Error(fmt.Sprintf("Error updating final message: %v", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func replyToUpdateMessage(finalResponse string, api *slack.Client, ev *slackevents.AppMentionEvent, msgTs string, ts string, res *types.JobResult) {
|
||||||
|
if len(finalResponse) > 4000 {
|
||||||
|
// split response in multiple messages, and update the first
|
||||||
|
|
||||||
|
messages := splitText(finalResponse, 4000)
|
||||||
|
|
||||||
|
_, _, _, err := api.UpdateMessage(
|
||||||
|
ev.Channel,
|
||||||
|
msgTs,
|
||||||
|
slack.MsgOptionLinkNames(true),
|
||||||
|
slack.MsgOptionEnableLinkUnfurl(),
|
||||||
|
slack.MsgOptionText(messages[0], true),
|
||||||
|
slack.MsgOptionAttachments(generateAttachmentsFromJobResponse(res)...),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
xlog.Error(fmt.Sprintf("Error updating final message: %v", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, message := range messages {
|
||||||
|
if i == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
_, _, err = api.PostMessage(ev.Channel,
|
||||||
|
slack.MsgOptionLinkNames(true),
|
||||||
|
slack.MsgOptionEnableLinkUnfurl(),
|
||||||
|
slack.MsgOptionText(message, true),
|
||||||
|
slack.MsgOptionTS(ts),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
xlog.Error(fmt.Sprintf("Error posting message: %v", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_, _, _, err := api.UpdateMessage(
|
||||||
|
ev.Channel,
|
||||||
|
msgTs,
|
||||||
|
slack.MsgOptionLinkNames(true),
|
||||||
|
slack.MsgOptionEnableLinkUnfurl(),
|
||||||
|
slack.MsgOptionText(finalResponse, true),
|
||||||
|
slack.MsgOptionAttachments(generateAttachmentsFromJobResponse(res)...),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
xlog.Error(fmt.Sprintf("Error updating final message: %v", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Slack) handleMention(
|
func (t *Slack) handleMention(
|
||||||
a *agent.Agent, api *slack.Client, ev *slackevents.AppMentionEvent,
|
a *agent.Agent, api *slack.Client, ev *slackevents.AppMentionEvent,
|
||||||
b *slack.AuthTestResponse, postMessageParams slack.PostMessageParameters) {
|
b *slack.AuthTestResponse, postMessageParams slack.PostMessageParameters) {
|
||||||
@@ -569,17 +671,7 @@ func (t *Slack) handleMention(
|
|||||||
t.placeholderMutex.RUnlock()
|
t.placeholderMutex.RUnlock()
|
||||||
|
|
||||||
if exists && msgTs != "" {
|
if exists && msgTs != "" {
|
||||||
_, _, _, err = api.UpdateMessage(
|
replyToUpdateMessage(finalResponse, api, ev, msgTs, ts, res)
|
||||||
ev.Channel,
|
|
||||||
msgTs,
|
|
||||||
slack.MsgOptionLinkNames(true),
|
|
||||||
slack.MsgOptionEnableLinkUnfurl(),
|
|
||||||
slack.MsgOptionText(finalResponse, true),
|
|
||||||
slack.MsgOptionAttachments(generateAttachmentsFromJobResponse(res)...),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
xlog.Error(fmt.Sprintf("Error updating final message: %v", err))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up the placeholder map
|
// Clean up the placeholder map
|
||||||
t.placeholderMutex.Lock()
|
t.placeholderMutex.Lock()
|
||||||
|
|||||||
Reference in New Issue
Block a user