diff --git a/bot/data.go b/bot/data.go index 029cf17..031de5e 100644 --- a/bot/data.go +++ b/bot/data.go @@ -2,6 +2,7 @@ package bot import ( "context" + "strings" "github.com/getsentry/sentry-go" "maunium.net/go/mautrix/id" @@ -66,6 +67,15 @@ func (b *Bot) getSettings(ctx context.Context, roomID id.RoomID) (settings, erro var config settings err := b.lp.GetClient().GetRoomAccountData(roomID, settingskey, &config) + if err != nil { + if strings.Contains(err.Error(), "M_NOT_FOUND") { + // Suppress `M_NOT_FOUND (HTTP 404): Room account data not found` errors. + // Until some settings are explicitly set, we don't store any. + // In such cases, just return a default (empty) settings object. + err = nil + } + } + return config, err } diff --git a/bot/mailbox.go b/bot/mailbox.go index 5408829..9f8557a 100644 --- a/bot/mailbox.go +++ b/bot/mailbox.go @@ -50,6 +50,8 @@ func (b *Bot) getMailbox(ctx context.Context, evt *event.Event) { cfg, err := b.getSettings(span.Context(), evt.RoomID) if err != nil { b.log.Warn("cannot get %s settings: %v", evt.RoomID, err) + b.Error(span.Context(), evt.RoomID, "failed to retrieve settings") + return } if cfg.Mailbox == "" { @@ -82,6 +84,8 @@ func (b *Bot) setMailbox(ctx context.Context, evt *event.Event, mailbox string) cfg, err := b.getSettings(span.Context(), evt.RoomID) if err != nil { b.log.Warn("cannot get settings: %v", err) + b.Error(span.Context(), evt.RoomID, "failed to retrieve settings") + return } if !cfg.Allowed(b.noowner, evt.Sender) { diff --git a/bot/owner.go b/bot/owner.go index 483fd43..6af5e2d 100644 --- a/bot/owner.go +++ b/bot/owner.go @@ -23,7 +23,8 @@ func (b *Bot) getOwner(ctx context.Context, evt *event.Event) { cfg, err := b.getSettings(span.Context(), evt.RoomID) if err != nil { - b.Error(span.Context(), evt.RoomID, "owner is not set yet") + b.log.Warn("cannot get settings: %v", err) + b.Error(span.Context(), evt.RoomID, "failed to retrieve settings") return } @@ -48,6 +49,8 @@ func (b *Bot) setOwner(ctx context.Context, evt *event.Event, owner string) { cfg, err := b.getSettings(span.Context(), evt.RoomID) if err != nil { b.log.Warn("cannot get settings: %v", err) + b.Error(span.Context(), evt.RoomID, "failed to retrieve settings") + return } if !cfg.Allowed(b.noowner, evt.Sender) {