Skip to content

Commit

Permalink
Lark: Use new "Code block" feature for messages/notifications (#157)
Browse files Browse the repository at this point in the history
  • Loading branch information
nt0xa authored Feb 8, 2024
1 parent 7410d4f commit 09e841c
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 63 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ require (
github.com/invopop/jsonschema v0.8.0
github.com/jmoiron/sqlx v1.3.5
github.com/kelseyhightower/envconfig v1.4.0
github.com/larksuite/oapi-sdk-go/v3 v3.0.29
github.com/larksuite/oapi-sdk-go/v3 v3.1.4
github.com/lib/pq v1.10.9
github.com/miekg/dns v1.1.56
github.com/mitchellh/mapstructure v1.5.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,8 @@ github.com/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HK
github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w=
github.com/larksuite/oapi-sdk-go/v3 v3.0.29 h1:WLBeOkUh8emL9wYUZ49CbWjGMkjCxQoNavbLRYYMu+A=
github.com/larksuite/oapi-sdk-go/v3 v3.0.29/go.mod h1:FKi8vBgtkBt/xNRQUwdWvoDmsPh7/wP75Sn5IBIBQLk=
github.com/larksuite/oapi-sdk-go/v3 v3.1.4 h1:qrCvFILeYufB1SudY2KOs1iqSw+x1EsY4NhC41i0cUE=
github.com/larksuite/oapi-sdk-go/v3 v3.1.4/go.mod h1:F4MLXkfdc/7WAJPLy4lJ0R6VqCxKgqWYS1uYY84p3SI=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
Expand Down
62 changes: 9 additions & 53 deletions internal/modules/lark/lark.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"sync"
"time"

Expand All @@ -29,7 +28,6 @@ import (
"github.com/russtone/sonar/internal/database"
"github.com/russtone/sonar/internal/database/models"
"github.com/russtone/sonar/internal/templates"
"github.com/russtone/sonar/internal/utils/errors"
)

type Lark struct {
Expand Down Expand Up @@ -86,6 +84,7 @@ func New(cfg *Config, db *database.DB, tlsConfig *tls.Config, acts actions.Actio
templates.HTMLEscape(false),
templates.Markup(
templates.Bold("**", "**"),
templates.CodeBlock("```", "```"),
),
),
// Disable markup for notification header.
Expand Down Expand Up @@ -193,7 +192,7 @@ func (lrk *Lark) Start() error {

if err := lrk.db.UsersCreate(user); err != nil {
// TODO: logging
lrk.mdMessage(*userID, msgID, "internal error")
lrk.message(*userID, msgID, "internal error")
return nil
}
}
Expand All @@ -219,33 +218,17 @@ func (lrk *Lark) Start() error {
return err
}

if res.ResultID() == actions.EventsGetResultID {
lines := strings.SplitN(s, "\n", 2)
lrk.cardMessage("", msgID, []*larkcard.MessageCardField{
larkcard.NewMessageCardField().
Text(larkcard.NewMessageCardLarkMd().
Content(lines[0] + "\n").
Build()).
Build(),
larkcard.NewMessageCardField().
Text(larkcard.NewMessageCardPlainText().
Content(lines[1]).
Build()).
Build(),
})
} else {
lrk.mdMessage("", msgID, s)
}
lrk.message("", msgID, s)

return nil
})

if stdout != "" {
lrk.txtMessage("", msgID, stdout)
lrk.message("", msgID, stdout)
}

if stderr != "" {
lrk.txtMessage("", msgID, stderr)
lrk.message("", msgID, stderr)
}

return nil
Expand All @@ -272,47 +255,20 @@ func (lrk *Lark) Start() error {
}
}

func (lrk *Lark) handleError(userID string, msgID *string, err errors.Error) {
lrk.txtMessage(userID, msgID, err.Error())
}

func (lrk *Lark) txtMessage(userID string, msgID *string, txt string) {
lrk.cardMessage(userID, msgID, []*larkcard.MessageCardField{
larkcard.NewMessageCardField().
Text(larkcard.NewMessageCardPlainText().
Content(txt).
Build(),
).
Build(),
})
}

func (lrk *Lark) mdMessage(userID string, msgID *string, md string) {
lrk.cardMessage(userID, msgID, []*larkcard.MessageCardField{
larkcard.NewMessageCardField().
Text(larkcard.NewMessageCardLarkMd().
Content(md).
Build(),
).
Build(),
})
}

func (lrk *Lark) cardMessage(userID string, msgID *string, fields []*larkcard.MessageCardField) {
func (lrk *Lark) message(userID string, msgID *string, content string) {
config := larkcard.NewMessageCardConfig().
WideScreenMode(true).
EnableForward(true).
UpdateMulti(false).
Build()

// Elements
div := larkcard.NewMessageCardDiv().
Fields(fields).
md := larkcard.NewMessageCardMarkdown().
Content(content).
Build()

card := larkcard.NewMessageCard().
Config(config).
Elements([]larkcard.MessageCardElement{div}).
Elements([]larkcard.MessageCardElement{md}).
Build()

content, err := card.String()
Expand Down
11 changes: 3 additions & 8 deletions internal/modules/lark/notifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,19 +55,14 @@ func (lrk *Lark) Notify(n *modules.Notification) error {
if utf8.ValidString(body) {

// Elements
div := larkcard.NewMessageCardDiv().
Fields([]*larkcard.MessageCardField{larkcard.NewMessageCardField().
Text(larkcard.NewMessageCardPlainText().
Content(body).
Build()).
IsShort(true).
Build()}).
md := larkcard.NewMessageCardMarkdown().
Content(body).
Build()

card := larkcard.NewMessageCard().
Config(config).
Header(cardHeader).
Elements([]larkcard.MessageCardElement{div}).
Elements([]larkcard.MessageCardElement{md}).
Build()

content, err := card.String()
Expand Down
4 changes: 3 additions & 1 deletion internal/templates/content.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,9 @@ var event = `

var eventsGet = event + `
<pre>{{ $e.RW | b64dec }}</pre>`
<pre>
{{ $e.RW | b64dec }}
</pre>`

var eventsList = fmt.Sprintf(`
{{- range . -}}
Expand Down

0 comments on commit 09e841c

Please sign in to comment.