test parsing slack messages
This commit is contained in:
93
message.go
93
message.go
@@ -1,6 +1,11 @@
|
||||
package main
|
||||
|
||||
import "encoding/json"
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Message struct {
|
||||
ID string
|
||||
@@ -39,3 +44,89 @@ func Deserialize(b []byte) (Message, error) {
|
||||
err := json.Unmarshal(b, &m)
|
||||
return m, err
|
||||
}
|
||||
|
||||
type (
|
||||
slackMessage struct {
|
||||
TS uint64 `json:"event_time"`
|
||||
Event slackEvent
|
||||
}
|
||||
|
||||
slackEvent struct {
|
||||
ID string `json:"event_ts"`
|
||||
Channel string
|
||||
// human
|
||||
ParentID string `json:"thread_ts"`
|
||||
Text string
|
||||
Blocks []slackBlock
|
||||
// bot
|
||||
Bot slackBot `json:"bot_profile"`
|
||||
Attachments []slackAttachment
|
||||
}
|
||||
|
||||
slackBlock struct {
|
||||
Elements []slackElement
|
||||
}
|
||||
|
||||
slackElement struct {
|
||||
Elements []slackElement
|
||||
RichText string `json:"text"`
|
||||
}
|
||||
|
||||
slackBot struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
slackAttachment struct {
|
||||
Color string
|
||||
Title string
|
||||
Text string
|
||||
Fields []slackField
|
||||
Actions []slackAction
|
||||
}
|
||||
|
||||
slackField struct {
|
||||
Value string
|
||||
Title string
|
||||
}
|
||||
|
||||
slackAction struct{}
|
||||
)
|
||||
|
||||
func ParseSlack(b []byte) (Message, error) {
|
||||
s, err := parseSlack(b)
|
||||
if err != nil {
|
||||
return Message{}, err
|
||||
}
|
||||
|
||||
if s.Event.Bot.Name != "" {
|
||||
return Message{
|
||||
ID: strconv.FormatUint(s.TS, 10),
|
||||
TS: s.TS,
|
||||
Source: fmt.Sprintf(`https://renderinc.slack.com/archives/%s/p%s`, s.Event.Channel, strings.ReplaceAll(s.Event.ID, ".", "")),
|
||||
Channel: s.Event.Channel,
|
||||
Thread: s.Event.ID,
|
||||
EventName: strings.Split(s.Event.Attachments[0].Title, ": Firing: ")[1],
|
||||
Event: strings.Split(s.Event.Attachments[0].Title, ":")[0],
|
||||
Plaintext: s.Event.Attachments[0].Text,
|
||||
Asset: "TODO",
|
||||
}, nil
|
||||
}
|
||||
|
||||
return Message{
|
||||
ID: strconv.FormatUint(s.TS, 10),
|
||||
TS: s.TS,
|
||||
Source: fmt.Sprintf(`https://renderinc.slack.com/archives/%s/p%s`, s.Event.Channel, strings.ReplaceAll(s.Event.ParentID, ".", "")),
|
||||
Channel: s.Event.Channel,
|
||||
Thread: s.Event.ParentID,
|
||||
EventName: "TODO",
|
||||
Event: "TODO",
|
||||
Plaintext: s.Event.Text,
|
||||
Asset: "TODO",
|
||||
}, nil
|
||||
}
|
||||
|
||||
func parseSlack(b []byte) (slackMessage, error) {
|
||||
var result slackMessage
|
||||
err := json.Unmarshal(b, &result)
|
||||
return result, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user