hicli/pushrules: add support for room mentions

This commit is contained in:
Tulir Asokan 2024-10-18 14:09:11 +03:00
parent 3dd7f9a4bd
commit 7601609683
3 changed files with 30 additions and 4 deletions

2
go.mod
View file

@ -20,7 +20,7 @@ require (
golang.org/x/net v0.30.0
gopkg.in/yaml.v3 v3.0.1
maunium.net/go/mauflag v1.0.0
maunium.net/go/mautrix v0.21.2-0.20241017173032-367828429297
maunium.net/go/mautrix v0.21.2-0.20241018110725-6c07832ed7b5
mvdan.cc/xurls/v2 v2.5.0
)

4
go.sum
View file

@ -73,7 +73,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
maunium.net/go/mautrix v0.21.2-0.20241017173032-367828429297 h1:8CybV+x9HPh4p41nIqJMKHI0bUF0g0bEozq49ytNVlc=
maunium.net/go/mautrix v0.21.2-0.20241017173032-367828429297/go.mod h1:sjCZR1R/3NET/WjkcXPL6WpAHlWKku9HjRsdOkbM8Qw=
maunium.net/go/mautrix v0.21.2-0.20241018110725-6c07832ed7b5 h1:tbBKkNxpRabCFcekRMDTaV+z+ZZUAG5zNpOMI4zk/sQ=
maunium.net/go/mautrix v0.21.2-0.20241018110725-6c07832ed7b5/go.mod h1:sjCZR1R/3NET/WjkcXPL6WpAHlWKku9HjRsdOkbM8Qw=
mvdan.cc/xurls/v2 v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
mvdan.cc/xurls/v2 v2.5.0/go.mod h1:yQgaGQ1rFtJUzkmKiHYSSfuQxqfYmd//X6PxvholpeE=

View file

@ -8,6 +8,7 @@ package hicli
import (
"context"
"encoding/json"
"github.com/rs/zerolog"
"maunium.net/go/mautrix"
@ -23,6 +24,7 @@ type pushRoom struct {
roomID id.RoomID
h *HiClient
ll *mautrix.LazyLoadSummary
pl *event.PowerLevelsEventContent
}
func (p *pushRoom) GetOwnDisplayname() string {
@ -58,7 +60,31 @@ func (p *pushRoom) GetEvent(id id.EventID) *event.Event {
return evt.AsRawMautrix()
}
var _ pushrules.EventfulRoom = (*pushRoom)(nil)
func (p *pushRoom) GetPowerLevels() *event.PowerLevelsEventContent {
if p.pl != nil {
return p.pl
}
evt, err := p.h.DB.CurrentState.Get(p.ctx, p.roomID, event.StatePowerLevels, "")
if err != nil {
zerolog.Ctx(p.ctx).Err(err).
Stringer("room_id", p.roomID).
Msg("Failed to get power levels in push rule evaluator")
return nil
}
err = json.Unmarshal(evt.Content, &p.pl)
if err != nil {
zerolog.Ctx(p.ctx).Err(err).
Stringer("room_id", p.roomID).
Msg("Failed to unmarshal power levels in push rule evaluator")
return nil
}
return p.pl
}
var (
_ pushrules.EventfulRoom = (*pushRoom)(nil)
_ pushrules.PowerLevelfulRoom = (*pushRoom)(nil)
)
func (h *HiClient) evaluatePushRules(ctx context.Context, llSummary *mautrix.LazyLoadSummary, baseType database.UnreadType, evt *event.Event) database.UnreadType {
should := h.PushRules.Load().GetMatchingRule(&pushRoom{