diff --git a/bot/bot.go b/bot/bot.go index 07d7b9b..dbcb11c 100644 --- a/bot/bot.go +++ b/bot/bot.go @@ -6,7 +6,6 @@ import ( "regexp" "sync" - "git.sr.ht/~xn/cache/v2" "github.com/getsentry/sentry-go" "gitlab.com/etke.cc/go/logger" "gitlab.com/etke.cc/linkpearl" @@ -25,8 +24,6 @@ type Bot struct { allowedAdmins []*regexp.Regexp commands commandList rooms sync.Map - botcfg cache.Cache[botSettings] - cfg cache.Cache[roomSettings] mta utils.MTA log *logger.Logger lp *linkpearl.Linkpearl @@ -46,8 +43,6 @@ func New( prefix: prefix, domain: domain, rooms: sync.Map{}, - botcfg: cache.NewLRU[botSettings](1), - cfg: cache.NewLRU[roomSettings](1000), log: log, lp: lp, mu: map[id.RoomID]*sync.Mutex{}, diff --git a/bot/email.go b/bot/email.go index 311701b..6418215 100644 --- a/bot/email.go +++ b/bot/email.go @@ -174,20 +174,8 @@ func (b *Bot) Send2Email(ctx context.Context, to, subject, body string) error { 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() - resp, err := b.lp.GetClient().UploadMedia(req) - if err != nil { - b.Error(ctx, roomID, "cannot upload file %s: %v", req.FileName, err) - continue - } - _, err = b.lp.Send(roomID, &event.MessageEventContent{ - MsgType: file.MsgType, - Body: req.FileName, - URL: resp.ContentURI.CUString(), - RelatesTo: utils.RelatesTo(!noThreads, parentID), - }) - if err != nil { - b.Error(ctx, roomID, "cannot send uploaded file %s: %v", req.FileName, err) - } + err := b.lp.SendFile(roomID, req, file.MsgType, utils.RelatesTo(!noThreads, parentID)) + b.Error(ctx, roomID, "cannot upload file %s: %v", req.FileName, err) } } diff --git a/bot/settings_bot.go b/bot/settings_bot.go index d45cbe4..23e1dfe 100644 --- a/bot/settings_bot.go +++ b/bot/settings_bot.go @@ -68,29 +68,15 @@ func (b *Bot) initBotUsers() ([]string, error) { } func (b *Bot) getBotSettings() botSettings { - cfg := b.botcfg.Get(acBotSettingsKey) - if cfg != nil { - return cfg - } - config := botSettings{} - err := b.lp.GetClient().GetAccountData(acBotSettingsKey, &config) + err := b.lp.GetAccountData(acBotSettingsKey, &config) if err != nil { - if strings.Contains(err.Error(), "M_NOT_FOUND") { - err = nil - } else { - b.log.Error("cannot get bot settings: %v", utils.UnwrapError(err)) - } - } - - if err == nil { - b.botcfg.Set(acBotSettingsKey, config) + b.log.Error("cannot get bot settings: %v", utils.UnwrapError(err)) } return config } func (b *Bot) setBotSettings(cfg botSettings) error { - b.botcfg.Set(acBotSettingsKey, cfg) - return utils.UnwrapError(b.lp.GetClient().SetAccountData(acBotSettingsKey, cfg)) + return utils.UnwrapError(b.lp.SetAccountData(acBotSettingsKey, cfg)) } diff --git a/bot/settings_room.go b/bot/settings_room.go index fe471d4..0ca169b 100644 --- a/bot/settings_room.go +++ b/bot/settings_room.go @@ -88,30 +88,11 @@ func (s roomSettings) ContentOptions() *utils.ContentOptions { } func (b *Bot) getRoomSettings(roomID id.RoomID) (roomSettings, error) { - cfg := b.cfg.Get(roomID.String()) - if cfg != nil { - return cfg, nil - } - config := roomSettings{} - err := b.lp.GetClient().GetRoomAccountData(roomID, acRoomSettingsKey, &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 - } - } - - if err == nil { - b.cfg.Set(roomID.String(), config) - } - + err := b.lp.GetRoomAccountData(roomID, acRoomSettingsKey, &config) return config, utils.UnwrapError(err) } func (b *Bot) setRoomSettings(roomID id.RoomID, cfg roomSettings) error { - b.cfg.Set(roomID.String(), cfg) - return utils.UnwrapError(b.lp.GetClient().SetRoomAccountData(roomID, acRoomSettingsKey, cfg)) + return utils.UnwrapError(b.lp.SetRoomAccountData(roomID, acRoomSettingsKey, cfg)) } diff --git a/go.mod b/go.mod index ff8d7a0..fd50754 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,9 @@ module gitlab.com/etke.cc/postmoogle go 1.18 +// replace gitlab.com/etke.cc/linkpearl => ../linkpearl + require ( - git.sr.ht/~xn/cache/v2 v2.0.0 github.com/emersion/go-msgauth v0.6.6 github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 github.com/emersion/go-smtp v0.15.0 @@ -17,8 +18,8 @@ require ( gitlab.com/etke.cc/go/logger v1.1.0 gitlab.com/etke.cc/go/mxidwc v1.0.0 gitlab.com/etke.cc/go/secgen v1.1.1 - gitlab.com/etke.cc/linkpearl v0.0.0-20220921080011-9407dc599571 - golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9 + gitlab.com/etke.cc/linkpearl v0.0.0-20221002104708-53f8146c2323 + golang.org/x/net v0.0.0-20221002022538-bcab6841153b maunium.net/go/mautrix v0.12.1 ) @@ -28,6 +29,7 @@ require ( github.com/google/go-cmp v0.5.8 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect @@ -40,11 +42,11 @@ require ( github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/tidwall/gjson v1.14.3 // indirect github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect + github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect github.com/yuin/goldmark v1.4.13 // indirect - golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 // indirect - golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect + golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be // indirect + golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect golang.org/x/text v0.3.7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect maunium.net/go/maulogger/v2 v2.3.2 // indirect diff --git a/go.sum b/go.sum index e5efcb0..f85c432 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -git.sr.ht/~xn/cache/v2 v2.0.0 h1:aYzwGDyVIzjCl2yqcxZjprnu++Q3BmUQeK2agqvcQt8= -git.sr.ht/~xn/cache/v2 v2.0.0/go.mod h1:HIPSMiDudQ483tRDup586e0YZdwMySIZFWXMPwYMuV8= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a h1:MISbI8sU/PSK/ztvmWKFcI7UGb5/HQT7B+i3a2myKgI= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a/go.mod h1:2GxOXOlEPAMFPfp014mK1SWq8G8BN8o7/dfYqJrVGn8= @@ -34,6 +32,8 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7 h1:g0fAGBisHaEQ0TRq1iBvemFRf+8AEWEmBESSiWB3Vsc= github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jhillyerd/enmime v0.10.0 h1:DZEzhptPRBesvN3gf7K1BOh4rfpqdsdrEoxW1Edr/3s= @@ -80,8 +80,9 @@ github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= @@ -94,16 +95,16 @@ gitlab.com/etke.cc/go/mxidwc v1.0.0 h1:6EAlJXvs3nU4RaMegYq6iFlyVvLw7JZYnZmNCGMYQ gitlab.com/etke.cc/go/mxidwc v1.0.0/go.mod h1:E/0kh45SAN9+ntTG0cwkAEKdaPxzvxVmnjwivm9nmz8= gitlab.com/etke.cc/go/secgen v1.1.1 h1:RmKOki725HIhWJHzPtAc9X4YvBneczndchpMgoDkE8w= gitlab.com/etke.cc/go/secgen v1.1.1/go.mod h1:3pJqRGeWApzx7qXjABqz2o2SMCNpKSZao/gXVdasqE8= -gitlab.com/etke.cc/linkpearl v0.0.0-20220921080011-9407dc599571 h1:ool1wnAnnIhZjwPMd0LUebpfxqXZcVhRli2UDhay0bA= -gitlab.com/etke.cc/linkpearl v0.0.0-20220921080011-9407dc599571/go.mod h1:4qbyfbuJSj89jFW7F+YjIbYrwJTrALQf4Otw0KGkIWE= +gitlab.com/etke.cc/linkpearl v0.0.0-20221002104708-53f8146c2323 h1:o+n56CVfX3N4lYsDLcokg4Knzbcm9osquuT7eVIpoJc= +gitlab.com/etke.cc/linkpearl v0.0.0-20221002104708-53f8146c2323/go.mod h1:3uV/5kgK5H7LDBwVUZxLw8kw2iPiXEGmwqKR8CRImKc= golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be h1:fmw3UbQh+nxngCAHrDCCztao/kbYFnWjoqop8dHx05A= +golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/net v0.0.0-20210501142056-aec3718b3fa0/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9 h1:asZqf0wXastQr+DudYagQS8uBO8bHKeYD1vbAvGmFL8= -golang.org/x/net v0.0.0-20220920203100-d0c6ba3f52d9/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221002022538-bcab6841153b h1:6e93nYa3hNqAvLr0pD4PN1fFS+gKzp2zAXqrnTCstqU= +golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -111,8 +112,8 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/utils/file.go b/utils/file.go index df4ad52..0b96519 100644 --- a/utils/file.go +++ b/utils/file.go @@ -31,8 +31,8 @@ func NewFile(name string, content []byte) *File { return file } -func (f *File) Convert() mautrix.ReqUploadMedia { - return mautrix.ReqUploadMedia{ +func (f *File) Convert() *mautrix.ReqUploadMedia { + return &mautrix.ReqUploadMedia{ ContentBytes: f.Content, Content: bytes.NewReader(f.Content), ContentLength: int64(f.Length),