From aa45619244bc27b95b2cf7adc0fb3b419a41c05d Mon Sep 17 00:00:00 2001 From: Scott Weber Date: Sun, 14 Jul 2024 20:52:03 -0400 Subject: [PATCH] Update mautrix-go (and update to new metadata system) --- go.mod | 4 ++-- go.sum | 8 ++++---- pkg/connector/client.go | 29 +++++++++++++++++------------ pkg/connector/config.go | 23 +++++++++++++++++++++++ pkg/connector/login.go | 6 ++---- pkg/connector/telegram.go | 2 +- 6 files changed, 49 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index 1ae0047f..c3167b68 100644 --- a/go.mod +++ b/go.mod @@ -6,10 +6,10 @@ require ( github.com/gotd/td v0.102.0 github.com/rs/zerolog v1.33.0 github.com/stretchr/testify v1.9.0 - go.mau.fi/util v0.5.1-0.20240710154926-931b33d6d530 + go.mau.fi/util v0.5.1-0.20240713134429-03648b3ede41 go.mau.fi/zerozap v0.1.1 go.uber.org/zap v1.27.0 - maunium.net/go/mautrix v0.19.0-beta.1.0.20240706124659-b4057a26c3ed + maunium.net/go/mautrix v0.19.0-beta.1.0.20240714121051-fb9fb5ae4405 ) require ( diff --git a/go.sum b/go.sum index 0ccaf372..c84d8229 100644 --- a/go.sum +++ b/go.sum @@ -67,8 +67,8 @@ 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.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= -go.mau.fi/util v0.5.1-0.20240710154926-931b33d6d530 h1:ZWMrLC+Fn2AmKL8HM04YY0zyMDMOagQZVukpxp0rmic= -go.mau.fi/util v0.5.1-0.20240710154926-931b33d6d530/go.mod h1:DsJzUrJAG53lCZnnYvq9/mOyLuPScWwYhvETiTrpdP4= +go.mau.fi/util v0.5.1-0.20240713134429-03648b3ede41 h1:suJqVZoWuiqmMo/xojAGSxz04fOYYu0oE7sFPrf2L5c= +go.mau.fi/util v0.5.1-0.20240713134429-03648b3ede41/go.mod h1:DsJzUrJAG53lCZnnYvq9/mOyLuPScWwYhvETiTrpdP4= go.mau.fi/zeroconfig v0.1.2 h1:DKOydWnhPMn65GbXZOafgkPm11BvFashZWLct0dGFto= go.mau.fi/zeroconfig v0.1.2/go.mod h1:NcSJkf180JT+1IId76PcMuLTNa1CzsFFZ0nBygIQM70= go.mau.fi/zerozap v0.1.1 h1:mxE/dW4wtkqBYOXOEEzXldk5qKB+ahsZXjoTGnvEhZQ= @@ -108,8 +108,8 @@ 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.19.0-beta.1.0.20240706124659-b4057a26c3ed h1:3F4YHSFaUJ9N0l4zNGeXZvnTBIHC9PDVOWOFiOvNn3Y= -maunium.net/go/mautrix v0.19.0-beta.1.0.20240706124659-b4057a26c3ed/go.mod h1:bNQrvIftiwJ+7OjSh+Gza5xcncq1ooHk6oyDWq4B4sg= +maunium.net/go/mautrix v0.19.0-beta.1.0.20240714121051-fb9fb5ae4405 h1:ltVzYFIc2mef32PG3qXMlpddreHToSqmZFSdEKAxjiU= +maunium.net/go/mautrix v0.19.0-beta.1.0.20240714121051-fb9fb5ae4405/go.mod h1:ldNVOQXaljMk4YLzlohp+DniMQtCSzTVcwjEFBlYQLM= nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= diff --git a/pkg/connector/client.go b/pkg/connector/client.go index b980bd2b..fb36d1e0 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -14,6 +14,7 @@ import ( "go.mau.fi/zerozap" "go.uber.org/zap" "maunium.net/go/mautrix/bridgev2" + "maunium.net/go/mautrix/bridgev2/database" "maunium.net/go/mautrix/bridgev2/networkid" "go.mau.fi/mautrix-telegram/pkg/connector/ids" @@ -187,10 +188,10 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta return nil, err } var name string + roomType := database.RoomTypeDM memberList := &bridgev2.ChatMemberList{ IsFull: true, // TODO not true for channels } - var isSpace, isDM bool var avatar *bridgev2.Avatar switch peerType { @@ -221,9 +222,9 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta }, }, } - isDM = true } case ids.PeerTypeChat: + roomType = database.RoomTypeGroupDM fullChat, err := t.client.API().MessagesGetFullChat(ctx, id) if err != nil { return nil, err @@ -265,11 +266,10 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta } return &bridgev2.ChatInfo{ - Name: &name, - Avatar: avatar, - Members: memberList, - IsDirectChat: &isDM, - IsSpace: &isSpace, + Name: &name, + Avatar: avatar, + Members: memberList, + Type: &roomType, }, nil } @@ -315,11 +315,16 @@ func (t *TelegramClient) getUserInfoFromTelegramUser(user *tg.User) (*bridgev2.U name := util.FormatFullName(user.FirstName, user.LastName) return &bridgev2.UserInfo{ - IsBot: &user.Bot, - Name: &name, - Avatar: avatar, - Identifiers: identifiers, - ExtraUpdates: bridgev2.SimpleMetadataUpdater[*bridgev2.Ghost]("fi.mau.telegram.is_premium", user.Premium), + IsBot: &user.Bot, + Name: &name, + Avatar: avatar, + Identifiers: identifiers, + ExtraUpdates: func(ctx context.Context, ghost *bridgev2.Ghost) (changed bool) { + meta := ghost.Metadata.(*GhostMetadata) + changed = meta.IsPremium != user.Premium + meta.IsPremium = user.Premium + return changed + }, }, nil } diff --git a/pkg/connector/config.go b/pkg/connector/config.go index 4149aa36..c0e89df0 100644 --- a/pkg/connector/config.go +++ b/pkg/connector/config.go @@ -7,6 +7,7 @@ import ( up "go.mau.fi/util/configupgrade" "maunium.net/go/mautrix/bridgev2" + "maunium.net/go/mautrix/bridgev2/database" "go.mau.fi/mautrix-telegram/pkg/connector/media" ) @@ -49,3 +50,25 @@ func (tg *TelegramConnector) ValidateConfig() error { } return nil } + +func (tg *TelegramConnector) GetDBMetaTypes() database.MetaTypes { + return database.MetaTypes{ + Ghost: func() any { + return &GhostMetadata{} + }, + Portal: nil, + Message: nil, + Reaction: nil, + UserLogin: func() any { + return &UserLoginMetadata{} + }, + } +} + +type GhostMetadata struct { + IsPremium bool `json:"is_premium"` +} + +type UserLoginMetadata struct { + Phone string `json:"phone"` +} diff --git a/pkg/connector/login.go b/pkg/connector/login.go index 5f22ca18..b1c2ed15 100644 --- a/pkg/connector/login.go +++ b/pkg/connector/login.go @@ -193,10 +193,8 @@ func (p *PhoneLogin) handleAuthSuccess(ctx context.Context, authorization *tg.Au userLoginID := ids.MakeUserLoginID(authorization.User.GetID()) ul, err := p.user.NewLogin(ctx, &database.UserLogin{ ID: userLoginID, - Metadata: database.UserLoginMetadata{ - Extra: map[string]any{ - "phone": p.phone, - }, + Metadata: UserLoginMetadata{ + Phone: p.phone, }, }, nil) if err != nil { diff --git a/pkg/connector/telegram.go b/pkg/connector/telegram.go index e28c64b5..b6a0ca11 100644 --- a/pkg/connector/telegram.go +++ b/pkg/connector/telegram.go @@ -352,7 +352,7 @@ func (t *TelegramClient) getReactionLimit(ctx context.Context, sender networkid. if err != nil { return 0, err } - if isPremium, ok := ghost.Metadata.Extra["fi.mau.telegram.is_premium"].(bool); ok && isPremium { + if ghost.Metadata.(*GhostMetadata).IsPremium { return int(config["reactions_user_max_premium"].(float64)), nil } else { return int(config["reactions_user_max_default"].(float64)), nil