slack-go / slack

Slack API in Go, originally by @nlopes; Maintainers needed, contact @parsley42
https://pkg.go.dev/github.com/slack-go/slack
BSD 2-Clause "Simplified" License
4.6k stars 1.11k forks source link

Get Block data from webhook payload #1257

Open Nilura opened 5 months ago

Nilura commented 5 months ago

here is the paylaod that I used to invoke Webhook

{ "text": "ERROR", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "> Danny Torrence left the following review for your property:" } } ] }

Is there any way to get that all info and post to a different channel currently only can get text

func handleInteractiveCallback(interactiveCallback slackevents.EventsAPIEvent, client *slack.Client, errorChannelID string) error {

switch interactiveCallback.Type {
// First we check if this is an CallbackEvent
case slackevents.CallbackEvent:

    innerEvent := interactiveCallback.InnerEvent

    switch ev := innerEvent.Data.(type) {
    case *slackevents.MessageEvent:
        err := handleMessageEvent(ev, client, errorChannelID)
        if err != nil {
            return err
        }
    }

default:
    return errors.New("unsupported event type")
}
return nil

}

func handleMessageEvent(event slackevents.MessageEvent, client slack.Client, errorChannelID string) error { botInfo, err := client.AuthTest() if err != nil { return fmt.Errorf("failed to get bot info: %w", err) }

if event.User == botInfo.UserID {
    log.Printf("Ignoring own bot message: %s", event.Text)
    return nil
}
text := strings.ToLower(event.Text)

if strings.Contains(text, "error") {

    _, _, _ = client.PostMessage(errorChannelID, slack.MsgOptionText(event.Text, false))

    return nil
}

return nil

}