From bebfa6df92e10317e6c2ebde487d4e9cb6627a49 Mon Sep 17 00:00:00 2001 From: Aine Date: Thu, 28 Sep 2023 15:17:55 +0300 Subject: [PATCH] provide proper reply-to fallback by default --- bot/bot.go | 2 +- bot/command.go | 10 +-- bot/command_admin.go | 65 ++++++++++---------- bot/command_owner.go | 27 ++++---- bot/email.go | 6 +- email/email.go | 3 +- go.mod | 2 +- go.sum | 4 +- utils/matrix.go | 26 -------- vendor/gitlab.com/etke.cc/linkpearl/utils.go | 29 +++++++++ vendor/modules.txt | 2 +- 11 files changed, 91 insertions(+), 85 deletions(-) delete mode 100644 utils/matrix.go diff --git a/bot/bot.go b/bot/bot.go index 2bef1c3..7e03489 100644 --- a/bot/bot.go +++ b/bot/bot.go @@ -112,7 +112,7 @@ func (b *Bot) Error(ctx context.Context, message string, args ...interface{}) { var relatesTo *event.RelatesTo if threadID != "" { - relatesTo = utils.RelatesTo(!noThreads, threadID) + relatesTo = linkpearl.RelatesTo(threadID, noThreads) } b.lp.SendNotice(evt.RoomID, "ERROR: "+err.Error(), relatesTo) diff --git a/bot/command.go b/bot/command.go index 5205da2..97f8d0b 100644 --- a/bot/command.go +++ b/bot/command.go @@ -518,7 +518,7 @@ func (b *Bot) sendHelp(ctx context.Context) { msg.WriteString("\n") } - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) runSend(ctx context.Context) { @@ -568,14 +568,14 @@ func (b *Bot) getSendDetails(ctx context.Context) (string, string, string, bool) "as you want.\n"+ "```", b.prefix), - utils.RelatesTo(!cfg.NoThreads(), evt.ID), + linkpearl.RelatesTo(evt.ID, cfg.NoThreads()), ) return "", "", "", false } mailbox := cfg.Mailbox() if mailbox == "" { - b.lp.SendNotice(evt.RoomID, "mailbox is not configured, kupo", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "mailbox is not configured, kupo", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return "", "", "", false } @@ -609,7 +609,7 @@ func (b *Bot) runSendCommand(ctx context.Context, cfg config.Room, tos []string, eml := email.New(ID, "", " "+ID, subject, from, to, to, "", body, htmlBody, nil, nil) data := eml.Compose(b.cfg.GetBot().DKIMPrivateKey()) if data == "" { - b.lp.SendNotice(evt.RoomID, "email body is empty", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "email body is empty", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return } queued, err := b.Sendmail(evt.ID, from, to, data) @@ -625,6 +625,6 @@ func (b *Bot) runSendCommand(ctx context.Context, cfg config.Room, tos []string, b.saveSentMetadata(ctx, false, evt.ID, recipients, eml, cfg) } if len(tos) > 1 { - b.lp.SendNotice(evt.RoomID, "All emails were sent.", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "All emails were sent.", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } } diff --git a/bot/command_admin.go b/bot/command_admin.go index b623441..9056ccc 100644 --- a/bot/command_admin.go +++ b/bot/command_admin.go @@ -10,6 +10,7 @@ import ( "time" "gitlab.com/etke.cc/go/secgen" + "gitlab.com/etke.cc/linkpearl" "maunium.net/go/mautrix/id" "gitlab.com/etke.cc/postmoogle/bot/config" @@ -48,7 +49,7 @@ func (b *Bot) sendMailboxes(ctx context.Context) { sort.Strings(slice) if len(slice) == 0 { - b.lp.SendNotice(evt.RoomID, "No mailboxes are managed by the bot so far, kupo!", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "No mailboxes are managed by the bot so far, kupo!", linkpearl.RelatesTo(evt.ID)) return } @@ -63,20 +64,20 @@ func (b *Bot) sendMailboxes(ctx context.Context) { msg.WriteString("\n") } - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runDelete(ctx context.Context, commandSlice []string) { evt := eventFromContext(ctx) if len(commandSlice) < 2 { - b.lp.SendNotice(evt.RoomID, fmt.Sprintf("Usage: `%s delete MAILBOX`", b.prefix), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, fmt.Sprintf("Usage: `%s delete MAILBOX`", b.prefix), linkpearl.RelatesTo(evt.ID)) return } mailbox := utils.Mailbox(commandSlice[1]) v, ok := b.rooms.Load(mailbox) if v == nil || !ok { - b.lp.SendNotice(evt.RoomID, "mailbox does not exists, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "mailbox does not exists, kupo", linkpearl.RelatesTo(evt.ID)) return } roomID := v.(id.RoomID) @@ -88,7 +89,7 @@ func (b *Bot) runDelete(ctx context.Context, commandSlice []string) { return } - b.lp.SendNotice(evt.RoomID, "mailbox has been deleted", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "mailbox has been deleted", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runUsers(ctx context.Context, commandSlice []string) { @@ -108,19 +109,19 @@ func (b *Bot) runUsers(ctx context.Context, commandSlice []string) { msg.WriteString("where each pattern is like `@someone:example.com`, ") msg.WriteString("`@bot.*:example.com`, `@*:another.com`, or `@*:*`\n") - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) return } _, homeserver, err := b.lp.GetClient().UserID.Parse() if err != nil { - b.lp.SendNotice(evt.RoomID, fmt.Sprintf("invalid userID: %v", err), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, fmt.Sprintf("invalid userID: %v", err), linkpearl.RelatesTo(evt.ID)) } patterns := commandSlice[1:] allowedUsers, err := parseMXIDpatterns(patterns, "@*:"+homeserver) if err != nil { - b.lp.SendNotice(evt.RoomID, fmt.Sprintf("invalid patterns: %v", err), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, fmt.Sprintf("invalid patterns: %v", err), linkpearl.RelatesTo(evt.ID)) return } @@ -131,7 +132,7 @@ func (b *Bot) runUsers(ctx context.Context, commandSlice []string) { b.Error(ctx, "cannot set bot config: %v", err) } b.allowedUsers = allowedUsers - b.lp.SendNotice(evt.RoomID, "allowed users updated", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "allowed users updated", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runDKIM(ctx context.Context, commandSlice []string) { @@ -167,7 +168,7 @@ func (b *Bot) runDKIM(ctx context.Context, commandSlice []string) { "Without that record other email servers may reject your emails as spam, kupo.\n"+ "To reset the signature, send `%s dkim reset`", signature, signature, b.prefix), - utils.RelatesTo(true, evt.ID), + linkpearl.RelatesTo(evt.ID), ) } @@ -191,14 +192,14 @@ func (b *Bot) runCatchAll(ctx context.Context, commandSlice []string) { msg.WriteString(" catch-all MAILBOX`") msg.WriteString("where mailbox is valid and existing mailbox name\n") - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) return } mailbox := utils.Mailbox(commandSlice[1]) _, ok := b.GetMapping(mailbox) if !ok { - b.lp.SendNotice(evt.RoomID, "mailbox does not exist, kupo.", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "mailbox does not exist, kupo.", linkpearl.RelatesTo(evt.ID)) return } @@ -209,7 +210,7 @@ func (b *Bot) runCatchAll(ctx context.Context, commandSlice []string) { return } - b.lp.SendNotice(evt.RoomID, fmt.Sprintf("Catch-all is set to: `%s` (%s).", mailbox, utils.EmailsList(mailbox, "")), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, fmt.Sprintf("Catch-all is set to: `%s` (%s).", mailbox, utils.EmailsList(mailbox, "")), linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runAdminRoom(ctx context.Context, commandSlice []string) { @@ -229,7 +230,7 @@ func (b *Bot) runAdminRoom(ctx context.Context, commandSlice []string) { msg.WriteString(" adminroom ROOM_ID`") msg.WriteString("where ROOM_ID is valid and existing matrix room id\n") - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) return } @@ -243,7 +244,7 @@ func (b *Bot) runAdminRoom(ctx context.Context, commandSlice []string) { b.adminRooms = append([]id.RoomID{id.RoomID(roomID)}, b.adminRooms...) // make it the first room in list on the fly - b.lp.SendNotice(evt.RoomID, fmt.Sprintf("Admin Room is set to: `%s`.", roomID), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, fmt.Sprintf("Admin Room is set to: `%s`.", roomID), linkpearl.RelatesTo(evt.ID)) } func (b *Bot) printGreylist(ctx context.Context, roomID id.RoomID) { @@ -274,7 +275,7 @@ func (b *Bot) printGreylist(ctx context.Context, roomID id.RoomID) { msg.WriteString("where `MIN` is duration in minutes for automatic greylisting\n") } - b.lp.SendNotice(roomID, msg.String(), utils.RelatesTo(true, eventFromContext(ctx).ID)) + b.lp.SendNotice(roomID, msg.String(), linkpearl.RelatesTo(eventFromContext(ctx).ID)) } func (b *Bot) runGreylist(ctx context.Context, commandSlice []string) { @@ -290,7 +291,7 @@ func (b *Bot) runGreylist(ctx context.Context, commandSlice []string) { if err != nil { b.Error(ctx, "cannot set bot config: %v", err) } - b.lp.SendNotice(evt.RoomID, "greylist duration has been updated", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "greylist duration has been updated", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runBanlist(ctx context.Context, commandSlice []string) { @@ -318,7 +319,7 @@ func (b *Bot) runBanlist(ctx context.Context, commandSlice []string) { msg.WriteString("where each ip is IPv4 or IPv6\n\n") msg.WriteString("You can find current banlist values below:\n") - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) b.addBanlistTimeline(ctx, false) return } @@ -328,7 +329,7 @@ func (b *Bot) runBanlist(ctx context.Context, commandSlice []string) { if err != nil { b.Error(ctx, "cannot set bot config: %v", err) } - b.lp.SendNotice(evt.RoomID, "banlist has been updated", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist has been updated", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runBanlistTotals(ctx context.Context) { @@ -337,7 +338,7 @@ func (b *Bot) runBanlistTotals(ctx context.Context) { var msg strings.Builder size := len(banlist) if size == 0 { - b.lp.SendNotice(evt.RoomID, "banlist is empty, kupo.", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist is empty, kupo.", linkpearl.RelatesTo(evt.ID)) return } @@ -345,7 +346,7 @@ func (b *Bot) runBanlistTotals(ctx context.Context) { msg.WriteString(strconv.Itoa(size)) msg.WriteString(" hosts banned\n\n") msg.WriteString("You can find daily totals below:\n") - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) b.addBanlistTimeline(ctx, true) } @@ -364,7 +365,7 @@ func (b *Bot) runBanlistAuth(ctx context.Context, commandSlice []string) { msg.WriteString(" banlist:auth true` (banlist itself must be enabled!)\n\n") } - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) return } value := utils.SanitizeBoolString(commandSlice[1]) @@ -373,7 +374,7 @@ func (b *Bot) runBanlistAuth(ctx context.Context, commandSlice []string) { if err != nil { b.Error(ctx, "cannot set bot config: %v", err) } - b.lp.SendNotice(evt.RoomID, "auth banning has been updated", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "auth banning has been updated", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runBanlistAuto(ctx context.Context, commandSlice []string) { @@ -391,7 +392,7 @@ func (b *Bot) runBanlistAuto(ctx context.Context, commandSlice []string) { msg.WriteString(" banlist:auto true` (banlist itself must be enabled!)\n\n") } - b.lp.SendNotice(evt.RoomID, msg.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, msg.String(), linkpearl.RelatesTo(evt.ID)) return } value := utils.SanitizeBoolString(commandSlice[1]) @@ -400,7 +401,7 @@ func (b *Bot) runBanlistAuto(ctx context.Context, commandSlice []string) { if err != nil { b.Error(ctx, "cannot set bot config: %v", err) } - b.lp.SendNotice(evt.RoomID, "auto banning has been updated", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "auto banning has been updated", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runBanlistAdd(ctx context.Context, commandSlice []string) { @@ -410,7 +411,7 @@ func (b *Bot) runBanlistAdd(ctx context.Context, commandSlice []string) { return } if !b.cfg.GetBot().BanlistEnabled() { - b.lp.SendNotice(evt.RoomID, "banlist is disabled, you have to enable it first, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist is disabled, you have to enable it first, kupo", linkpearl.RelatesTo(evt.ID)) return } banlist := b.cfg.GetBanlist() @@ -431,7 +432,7 @@ func (b *Bot) runBanlistAdd(ctx context.Context, commandSlice []string) { return } - b.lp.SendNotice(evt.RoomID, "banlist has been updated, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist has been updated, kupo", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) runBanlistRemove(ctx context.Context, commandSlice []string) { @@ -441,7 +442,7 @@ func (b *Bot) runBanlistRemove(ctx context.Context, commandSlice []string) { return } if !b.cfg.GetBot().BanlistEnabled() { - b.lp.SendNotice(evt.RoomID, "banlist is disabled, you have to enable it first, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist is disabled, you have to enable it first, kupo", linkpearl.RelatesTo(evt.ID)) return } banlist := b.cfg.GetBanlist() @@ -462,7 +463,7 @@ func (b *Bot) runBanlistRemove(ctx context.Context, commandSlice []string) { return } - b.lp.SendNotice(evt.RoomID, "banlist has been updated, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist has been updated, kupo", linkpearl.RelatesTo(evt.ID)) } func (b *Bot) addBanlistTimeline(ctx context.Context, onlyTotals bool) { @@ -499,14 +500,14 @@ func (b *Bot) addBanlistTimeline(ctx context.Context, onlyTotals bool) { txt.WriteString(strings.Join(data, "`, `")) txt.WriteString("`\n") } - b.lp.SendNotice(evt.RoomID, txt.String(), utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, txt.String(), linkpearl.RelatesTo(evt.ID)) } } func (b *Bot) runBanlistReset(ctx context.Context) { evt := eventFromContext(ctx) if !b.cfg.GetBot().BanlistEnabled() { - b.lp.SendNotice(evt.RoomID, "banlist is disabled, you have to enable it first, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist is disabled, you have to enable it first, kupo", linkpearl.RelatesTo(evt.ID)) return } @@ -516,5 +517,5 @@ func (b *Bot) runBanlistReset(ctx context.Context) { return } - b.lp.SendNotice(evt.RoomID, "banlist has been reset, kupo", utils.RelatesTo(true, evt.ID)) + b.lp.SendNotice(evt.RoomID, "banlist has been reset, kupo", linkpearl.RelatesTo(evt.ID)) } diff --git a/bot/command_owner.go b/bot/command_owner.go index 47997c7..ffdffa4 100644 --- a/bot/command_owner.go +++ b/bot/command_owner.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/raja/argon2pw" + "gitlab.com/etke.cc/linkpearl" "golang.org/x/exp/slices" "gitlab.com/etke.cc/postmoogle/bot/config" @@ -23,7 +24,7 @@ func (b *Bot) runStop(ctx context.Context) { mailbox := cfg.Get(config.RoomMailbox) if mailbox == "" { - b.lp.SendNotice(evt.RoomID, "that room is not configured yet", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "that room is not configured yet", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return } @@ -35,7 +36,7 @@ func (b *Bot) runStop(ctx context.Context) { return } - b.lp.SendNotice(evt.RoomID, "mailbox has been disabled", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "mailbox has been disabled", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) handleOption(ctx context.Context, cmd []string) { @@ -72,7 +73,7 @@ func (b *Bot) getOption(ctx context.Context, name string) { msg := fmt.Sprintf("`%s` is not set, kupo.\n"+ "To set it, send a `%s %s VALUE` command.", name, b.prefix, name) - b.lp.SendNotice(evt.RoomID, msg, utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, msg, linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return } @@ -90,7 +91,7 @@ func (b *Bot) getOption(ctx context.Context, name string) { "or just set a new one with `%s %s NEW_PASSWORD`.", b.prefix, name) } - b.lp.SendNotice(evt.RoomID, msg, utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, msg, linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) setMailbox(ctx context.Context, value string) { @@ -123,7 +124,7 @@ func (b *Bot) setMailbox(ctx context.Context, value string) { } msg := fmt.Sprintf("mailbox of this room set to `%s`", value) - b.lp.SendNotice(evt.RoomID, msg, utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, msg, linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) setPassword(ctx context.Context) { @@ -148,7 +149,7 @@ func (b *Bot) setPassword(ctx context.Context) { return } - b.lp.SendNotice(evt.RoomID, "SMTP password has been set", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "SMTP password has been set", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) setOption(ctx context.Context, name, value string) { @@ -175,7 +176,7 @@ func (b *Bot) setOption(ctx context.Context, name, value string) { old := cfg.Get(name) if old == value { - b.lp.SendNotice(evt.RoomID, "nothing changed, kupo.", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "nothing changed, kupo.", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return } @@ -187,7 +188,7 @@ func (b *Bot) setOption(ctx context.Context, name, value string) { } msg := fmt.Sprintf("`%s` of this room set to `%s`", name, value) - b.lp.SendNotice(evt.RoomID, msg, utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, msg, linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) runSpamlistAdd(ctx context.Context, commandSlice []string) { @@ -222,7 +223,7 @@ func (b *Bot) runSpamlistAdd(ctx context.Context, commandSlice []string) { threadID = evt.ID } - b.lp.SendNotice(evt.RoomID, "spamlist has been updated, kupo", utils.RelatesTo(!cfg.NoThreads(), threadID)) + b.lp.SendNotice(evt.RoomID, "spamlist has been updated, kupo", linkpearl.RelatesTo(threadID, cfg.NoThreads())) } func (b *Bot) runSpamlistRemove(ctx context.Context, commandSlice []string) { @@ -247,7 +248,7 @@ func (b *Bot) runSpamlistRemove(ctx context.Context, commandSlice []string) { toRemove[idx] = struct{}{} } if len(toRemove) == 0 { - b.lp.SendNotice(evt.RoomID, "nothing new, kupo.", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "nothing new, kupo.", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return } @@ -266,7 +267,7 @@ func (b *Bot) runSpamlistRemove(ctx context.Context, commandSlice []string) { return } - b.lp.SendNotice(evt.RoomID, "spamlist has been updated, kupo", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "spamlist has been updated, kupo", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } func (b *Bot) runSpamlistReset(ctx context.Context) { @@ -278,7 +279,7 @@ func (b *Bot) runSpamlistReset(ctx context.Context) { } spamlist := utils.StringSlice(cfg[config.RoomSpamlist]) if len(spamlist) == 0 { - b.lp.SendNotice(evt.RoomID, "spamlist is empty, kupo.", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "spamlist is empty, kupo.", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) return } @@ -289,5 +290,5 @@ func (b *Bot) runSpamlistReset(ctx context.Context) { return } - b.lp.SendNotice(evt.RoomID, "spamlist has been reset, kupo.", utils.RelatesTo(!cfg.NoThreads(), evt.ID)) + b.lp.SendNotice(evt.RoomID, "spamlist has been reset, kupo.", linkpearl.RelatesTo(evt.ID, cfg.NoThreads())) } diff --git a/bot/email.go b/bot/email.go index a56da12..059eb06 100644 --- a/bot/email.go +++ b/bot/email.go @@ -315,7 +315,7 @@ func (b *Bot) SendEmailReply(ctx context.Context) { eml := email.New(meta.MessageID, meta.InReplyTo, meta.References, meta.Subject, meta.From, meta.To, meta.RcptTo, meta.CC, body, htmlBody, nil, nil) data := eml.Compose(b.cfg.GetBot().DKIMPrivateKey()) if data == "" { - b.lp.SendNotice(evt.RoomID, "email body is empty", utils.RelatesTo(!cfg.NoThreads(), meta.ThreadID)) + b.lp.SendNotice(evt.RoomID, "email body is empty", linkpearl.RelatesTo(meta.ThreadID, cfg.NoThreads())) return } @@ -520,7 +520,7 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve msgContent.MsgType = event.MsgNotice msgContent.Body = notice.Body msgContent.FormattedBody = notice.FormattedBody - msgContent.RelatesTo = utils.RelatesTo(!cfg.NoThreads(), threadID) + msgContent.RelatesTo = linkpearl.RelatesTo(threadID, cfg.NoThreads()) content.Parsed = msgContent msgID, err := b.lp.Send(evt.RoomID, content) if err != nil { @@ -536,7 +536,7 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve func (b *Bot) sendFiles(ctx context.Context, roomID id.RoomID, files []*utils.File, noThreads bool, parentID id.EventID) { for _, file := range files { req := file.Convert() - err := b.lp.SendFile(roomID, req, file.MsgType, utils.RelatesTo(!noThreads, parentID)) + err := b.lp.SendFile(roomID, req, file.MsgType, linkpearl.RelatesTo(parentID, noThreads)) if err != nil { b.Error(ctx, "cannot upload file %s: %v", req.FileName, err) } diff --git a/email/email.go b/email/email.go index 9d2b226..50a6be0 100644 --- a/email/email.go +++ b/email/email.go @@ -8,6 +8,7 @@ import ( "github.com/emersion/go-msgauth/dkim" "github.com/jhillyerd/enmime" + "gitlab.com/etke.cc/linkpearl" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/format" "maunium.net/go/mautrix/id" @@ -150,7 +151,7 @@ func (e *Email) Content(threadID id.EventID, options *ContentOptions) *event.Con } parsed := format.RenderMarkdown(text.String(), true, true) - parsed.RelatesTo = utils.RelatesTo(options.Threads, threadID) + parsed.RelatesTo = linkpearl.RelatesTo(threadID, !options.Threads) var cc string if len(e.CC) > 0 { diff --git a/go.mod b/go.mod index 315fecf..4e4afd9 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( gitlab.com/etke.cc/go/secgen v1.1.1 gitlab.com/etke.cc/go/trysmtp v1.1.3 gitlab.com/etke.cc/go/validator v1.0.6 - gitlab.com/etke.cc/linkpearl v0.0.0-20230928051620-7f1b7d54e9a8 + gitlab.com/etke.cc/linkpearl v0.0.0-20230928120707-1e99315dc616 golang.org/x/exp v0.0.0-20230905200255-921286631fa9 maunium.net/go/mautrix v0.16.1 ) diff --git a/go.sum b/go.sum index 1caeb59..e5b649b 100644 --- a/go.sum +++ b/go.sum @@ -111,8 +111,8 @@ gitlab.com/etke.cc/go/trysmtp v1.1.3 h1:e2EHond77onMaecqCg6mWumffTSEf+ycgj88nbee gitlab.com/etke.cc/go/trysmtp v1.1.3/go.mod h1:lOO7tTdAE0a3ETV3wN3GJ7I1Tqewu7YTpPWaOmTteV0= gitlab.com/etke.cc/go/validator v1.0.6 h1:w0Muxf9Pqw7xvF7NaaswE6d7r9U3nB2t2l5PnFMrecQ= gitlab.com/etke.cc/go/validator v1.0.6/go.mod h1:Id0SxRj0J3IPhiKlj0w1plxVLZfHlkwipn7HfRZsDts= -gitlab.com/etke.cc/linkpearl v0.0.0-20230928051620-7f1b7d54e9a8 h1:iCNH8eFwmqqU4OSXtR+OTi5OkElqB+AlyOrgm9YCluk= -gitlab.com/etke.cc/linkpearl v0.0.0-20230928051620-7f1b7d54e9a8/go.mod h1:IZ0TE+ZnIdJLb538owDMxhtpWH7blfW+oR7e5XRXxNY= +gitlab.com/etke.cc/linkpearl v0.0.0-20230928120707-1e99315dc616 h1:Gvhmq84VmAJN1xRzRBK79XJVObAvVcx9Q3s6K+Zo644= +gitlab.com/etke.cc/linkpearl v0.0.0-20230928120707-1e99315dc616/go.mod h1:IZ0TE+ZnIdJLb538owDMxhtpWH7blfW+oR7e5XRXxNY= go.mau.fi/util v0.1.0 h1:BwIFWIOEeO7lsiI2eWKFkWTfc5yQmoe+0FYyOFVyaoE= go.mau.fi/util v0.1.0/go.mod h1:AxuJUMCxpzgJ5eV9JbPWKRH8aAJJidxetNdUj7qcb84= golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= diff --git a/utils/matrix.go b/utils/matrix.go deleted file mode 100644 index 0dd9950..0000000 --- a/utils/matrix.go +++ /dev/null @@ -1,26 +0,0 @@ -package utils - -import ( - "maunium.net/go/mautrix/event" - "maunium.net/go/mautrix/id" -) - -// RelatesTo returns relation object of a matrix event (either threads or reply-to) -func RelatesTo(threads bool, parentID id.EventID) *event.RelatesTo { - if parentID == "" { - return nil - } - - if threads { - return &event.RelatesTo{ - Type: event.RelThread, - EventID: parentID, - } - } - - return &event.RelatesTo{ - InReplyTo: &event.InReplyTo{ - EventID: parentID, - }, - } -} diff --git a/vendor/gitlab.com/etke.cc/linkpearl/utils.go b/vendor/gitlab.com/etke.cc/linkpearl/utils.go index acecf2b..2e699f7 100644 --- a/vendor/gitlab.com/etke.cc/linkpearl/utils.go +++ b/vendor/gitlab.com/etke.cc/linkpearl/utils.go @@ -7,6 +7,35 @@ import ( "maunium.net/go/mautrix/id" ) +// RelatesTo returns relation object of a matrix event (either threads with reply-to fallback or plain reply-to) +func RelatesTo(parentID id.EventID, noThreads ...bool) *event.RelatesTo { + if parentID == "" { + return nil + } + + var nothreads bool + if len(noThreads) > 0 { + nothreads = noThreads[0] + } + + if nothreads { + return &event.RelatesTo{ + InReplyTo: &event.InReplyTo{ + EventID: parentID, + }, + } + } + + return &event.RelatesTo{ + Type: event.RelThread, + EventID: parentID, + InReplyTo: &event.InReplyTo{ + EventID: parentID, + }, + IsFallingBack: true, + } +} + // EventParent returns parent event ID (either from thread or from reply-to relation) func EventParent(currentID id.EventID, content *event.MessageEventContent) id.EventID { if content == nil { diff --git a/vendor/modules.txt b/vendor/modules.txt index e551601..5b590b4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -144,7 +144,7 @@ gitlab.com/etke.cc/go/trysmtp # gitlab.com/etke.cc/go/validator v1.0.6 ## explicit; go 1.18 gitlab.com/etke.cc/go/validator -# gitlab.com/etke.cc/linkpearl v0.0.0-20230928051620-7f1b7d54e9a8 +# gitlab.com/etke.cc/linkpearl v0.0.0-20230928120707-1e99315dc616 ## explicit; go 1.18 gitlab.com/etke.cc/linkpearl # go.mau.fi/util v0.1.0