diff --git a/.env.example b/.env.example index f203e1e..8203374 100644 --- a/.env.example +++ b/.env.example @@ -2,7 +2,7 @@ SOURCE_REPO=https://github.com/minhealthnz/nz-covid-data.git // Source repo DISCORD_WEBHOOKS= // Comma separated -SLACK_WEBHOOKS= // Comma separated +SLACK_WEBHOOKS= // webhook1!channel1,webhook2!channel2 Comma separated with ! for channel hash TWITTER_CONSUMER_KEY= TWITTER_CONSUMER_SECRET= diff --git a/internal/nzcovidbot/csv.go b/internal/nzcovidbot/csv.go index ec245b5..bc7d443 100644 --- a/internal/nzcovidbot/csv.go +++ b/internal/nzcovidbot/csv.go @@ -6,10 +6,14 @@ import ( "io" "io/ioutil" "log" + "net/url" "os" + "regexp" "sort" "strings" "time" + + "github.com/ashwanthkumar/slack-go-webhook" ) // Slice of updated located @@ -24,9 +28,9 @@ type UpdatedRow struct { LocationName string `json:"LocationName"` // Location Name LocationAddress string `json:"LocationAddress"` // Location Address - DiscordData string `json:"-"` // Formatted Row data - TwitterData string `json:"-"` // Formatted Row data - SlackData string `json:"-"` // Formatted Row data + DiscordData string `json:"-"` // Formatted Row data + TwitterData string `json:"-"` // Formatted Row data + SlackData slack.Attachment `json:"-"` // Formatted Row data } // Struct of updated locations @@ -198,8 +202,34 @@ func formatCsvTwitterRow(c []string) string { } // formatCsvSlackRow Format the string to a tidy string for the interwebs -func formatCsvSlackRow(c []string) string { - return fmt.Sprintf("*%s* %s on _%s_ - _%s_", c[2], c[3], c[0], c[1]) +func formatCsvSlackRow(c []string) slack.Attachment { + url := getMapsLinkFromAddress(c[2], c[3]) + name := stripDateFromName(c[2]) + dateRange := fmt.Sprintf("%s - %s", c[0], c[1]) + + attachment := slack.Attachment{ + Title: &name, + TitleLink: &url, + Text: &dateRange, + } + return attachment +} + +// getMapsLinkFromAddress hyperlink gmaps +func getMapsLinkFromAddress(name string, address string) string { + return fmt.Sprintf("https://www.google.com/maps/search/?api=1&query=%s", url.QueryEscape(name+", "+address)) +} + +// stripDateFromName if theres a date at the end - remove it! +func stripDateFromName(name string) string { + re := regexp.MustCompile(`\d{1,2}/\d{1,2}/\d{2,4}`) + submatchall := re.FindAllString(name, -1) + for _, element := range submatchall { + name = strings.Replace(name, element, "", 1) + break + } + + return strings.TrimSpace(name) } // Returns []string of parsed data.. starttime, endtime, name, address, ID @@ -267,8 +297,8 @@ func getPostableDiscordData() []string { return append(groups, strings.Join(rows, "\n")) } -func getPostableSlackData() []string { - rows := make([]string, 0) +func getPostableSlackData() []slack.Attachment { + rows := make([]slack.Attachment, 0) if len(updatedLocations.Locations) == 0 { return rows } diff --git a/internal/nzcovidbot/slack.go b/internal/nzcovidbot/slack.go index 951a4ed..a6c1cf9 100644 --- a/internal/nzcovidbot/slack.go +++ b/internal/nzcovidbot/slack.go @@ -7,7 +7,7 @@ import ( "github.com/ashwanthkumar/slack-go-webhook" ) -// Slack webhook URL +// Slack webhook#channel var SlackWebhooks []string func postToSlack() { @@ -15,29 +15,26 @@ func postToSlack() { return } - postableData := getPostableSlackData() - if len(postableData) == 0 { + attachmentData := getPostableSlackData() + if len(attachmentData) == 0 { return } - rawText := strings.Join(postableData, "\n") - attachment1 := slack.Attachment{} - attachment1.Text = &rawText - - payload := slack.Payload{ - Text: "New Locations of Interest!", - Username: "NZCovidTracker", - Channel: "#covid-19-locations", - IconUrl: "https://www.skids.co.nz/wp-content/uploads/2020/08/download.png", - Attachments: []slack.Attachment{attachment1}, - } - for _, webhook := range SlackWebhooks { if webhook == "" { continue } - err := slack.Send(webhook, "", payload) + parts := strings.Split(webhook, "!") + payload := slack.Payload{ + Text: "New Locations of Interest!", + Username: "NZCovidTracker", + Channel: "#" + parts[1], + IconUrl: "https://www.skids.co.nz/wp-content/uploads/2020/08/download.png", + Attachments: attachmentData, + } + + err := slack.Send(parts[0], "", payload) if len(err) > 0 { fmt.Print(err) }