deps/mautrix: upgrade for more ergonomic event meta handling

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-10-28 13:55:26 -06:00
parent 22488fbc5f
commit cc8dce3959
3 changed files with 60 additions and 59 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ require (
go.uber.org/zap v1.27.0 go.uber.org/zap v1.27.0
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
golang.org/x/net v0.30.0 golang.org/x/net v0.30.0
maunium.net/go/mautrix v0.21.2-0.20241023204042-6fd4b8a2132d maunium.net/go/mautrix v0.21.2-0.20241028194614-48aa04889cd6
) )
require ( require (
+2 -2
View File
@@ -117,8 +117,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA= maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
maunium.net/go/mautrix v0.21.2-0.20241023204042-6fd4b8a2132d h1:pW2F/uX9eqziumLBDiFAx2XwfiwPuKI6XyKqOkRDNCk= maunium.net/go/mautrix v0.21.2-0.20241028194614-48aa04889cd6 h1:cen1eiJxheWzF2PSR6rK+wDpX7H56CvQa4tqoypoOM8=
maunium.net/go/mautrix v0.21.2-0.20241023204042-6fd4b8a2132d/go.mod h1:sjCZR1R/3NET/WjkcXPL6WpAHlWKku9HjRsdOkbM8Qw= maunium.net/go/mautrix v0.21.2-0.20241028194614-48aa04889cd6/go.mod h1:sjCZR1R/3NET/WjkcXPL6WpAHlWKku9HjRsdOkbM8Qw=
nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y= nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y=
nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=
rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY=
+57 -56
View File
@@ -133,7 +133,6 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
sender := t.getEventSender(msg) sender := t.getEventSender(msg)
eventMeta := simplevent.EventMeta{ eventMeta := simplevent.EventMeta{
Type: bridgev2.RemoteEventChatInfoChange,
PortalKey: t.makePortalKeyFromPeer(msg.PeerID), PortalKey: t.makePortalKeyFromPeer(msg.PeerID),
Sender: sender, Sender: sender,
Timestamp: time.Unix(int64(msg.Date), 0), Timestamp: time.Unix(int64(msg.Date), 0),
@@ -146,59 +145,69 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
Stringer("peer_id", msg.PeerID) Stringer("peer_id", msg.PeerID)
}, },
} }
chatInfoChange := simplevent.ChatInfoChange{
EventMeta: eventMeta,
ChatInfoChange: &bridgev2.ChatInfoChange{},
}
switch action := msg.Action.(type) { switch action := msg.Action.(type) {
case *tg.MessageActionChatEditTitle: case *tg.MessageActionChatEditTitle:
chatInfoChange.ChatInfoChange.ChatInfo = &bridgev2.ChatInfo{Name: &action.Title} t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatInfoChange),
ChatInfoChange: &bridgev2.ChatInfoChange{ChatInfo: &bridgev2.ChatInfo{Name: &action.Title}},
})
case *tg.MessageActionChatEditPhoto: case *tg.MessageActionChatEditPhoto:
chatInfoChange.ChatInfoChange.ChatInfo = &bridgev2.ChatInfo{Avatar: t.avatarFromPhoto(action.Photo)} t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatInfoChange),
ChatInfoChange: &bridgev2.ChatInfoChange{ChatInfo: &bridgev2.ChatInfo{Avatar: t.avatarFromPhoto(action.Photo)}},
})
case *tg.MessageActionChatDeletePhoto: case *tg.MessageActionChatDeletePhoto:
chatInfoChange.ChatInfoChange.ChatInfo = &bridgev2.ChatInfo{Avatar: &bridgev2.Avatar{Remove: true}} t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatInfoChange),
ChatInfoChange: &bridgev2.ChatInfoChange{ChatInfo: &bridgev2.ChatInfo{Avatar: &bridgev2.Avatar{Remove: true}}},
})
case *tg.MessageActionChatAddUser: case *tg.MessageActionChatAddUser:
chatInfoChange.ChatInfoChange.MemberChanges = &bridgev2.ChatMemberList{ memberChanges := &bridgev2.ChatMemberList{
MemberMap: map[networkid.UserID]bridgev2.ChatMember{}, MemberMap: map[networkid.UserID]bridgev2.ChatMember{},
} }
for _, userID := range action.Users { for _, userID := range action.Users {
sender := ids.MakeUserID(userID) memberChanges.MemberMap[ids.MakeUserID(userID)] = bridgev2.ChatMember{
chatInfoChange.ChatInfoChange.MemberChanges.MemberMap[sender] = bridgev2.ChatMember{ EventSender: t.senderForUserID(userID),
EventSender: bridgev2.EventSender{ Membership: event.MembershipJoin,
SenderLogin: ids.MakeUserLoginID(userID),
Sender: sender,
},
Membership: event.MembershipJoin,
} }
} }
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatInfoChange),
ChatInfoChange: &bridgev2.ChatInfoChange{MemberChanges: memberChanges},
})
case *tg.MessageActionChatJoinedByLink: case *tg.MessageActionChatJoinedByLink:
chatInfoChange.ChatInfoChange.MemberChanges = &bridgev2.ChatMemberList{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
MemberMap: map[networkid.UserID]bridgev2.ChatMember{ EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatInfoChange),
sender.Sender: {EventSender: sender, Membership: event.MembershipJoin}, ChatInfoChange: &bridgev2.ChatInfoChange{
MemberChanges: &bridgev2.ChatMemberList{
MemberMap: map[networkid.UserID]bridgev2.ChatMember{
sender.Sender: {EventSender: sender, Membership: event.MembershipJoin},
},
},
}, },
} })
case *tg.MessageActionChatDeleteUser: case *tg.MessageActionChatDeleteUser:
sender := ids.MakeUserID(action.UserID)
if action.UserID == t.telegramUserID { if action.UserID == t.telegramUserID {
eventMeta.Type = bridgev2.RemoteEventChatDelete
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatDelete{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatDelete{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatDelete),
OnlyForMe: true, OnlyForMe: true,
}) })
return nil return nil
} }
chatInfoChange.ChatInfoChange.MemberChanges = &bridgev2.ChatMemberList{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
MemberMap: map[networkid.UserID]bridgev2.ChatMember{ EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatInfoChange),
sender: { ChatInfoChange: &bridgev2.ChatInfoChange{
EventSender: bridgev2.EventSender{ MemberChanges: &bridgev2.ChatMemberList{
SenderLogin: ids.MakeUserLoginID(action.UserID), MemberMap: map[networkid.UserID]bridgev2.ChatMember{
Sender: sender, ids.MakeUserID(action.UserID): {
EventSender: t.senderForUserID(action.UserID),
Membership: event.MembershipLeave,
},
}, },
Membership: event.MembershipLeave,
}, },
}, },
} })
case *tg.MessageActionChatCreate: case *tg.MessageActionChatCreate:
memberMap := map[networkid.UserID]bridgev2.ChatMember{} memberMap := map[networkid.UserID]bridgev2.ChatMember{}
for _, userID := range action.Users { for _, userID := range action.Users {
@@ -208,10 +217,10 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
} }
} }
eventMeta.Type = bridgev2.RemoteEventChatResync
eventMeta.CreatePortal = true
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{
EventMeta: eventMeta, EventMeta: eventMeta.
WithType(bridgev2.RemoteEventChatResync).
WithCreatePortal(true),
ChatInfo: &bridgev2.ChatInfo{ ChatInfo: &bridgev2.ChatInfo{
Name: &action.Title, Name: &action.Title,
Members: &bridgev2.ChatMemberList{ Members: &bridgev2.ChatMemberList{
@@ -222,9 +231,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
CanBackfill: true, CanBackfill: true,
}, },
}) })
eventMeta.Type = bridgev2.RemoteEventMessage
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventMessage),
ID: ids.GetMessageIDFromMessage(msg), ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
@@ -240,11 +248,11 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
}) })
case *tg.MessageActionChannelCreate: case *tg.MessageActionChannelCreate:
eventMeta.Type = bridgev2.RemoteEventChatResync
eventMeta.CreatePortal = true
modLevel := 50 modLevel := 50
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{
EventMeta: eventMeta, EventMeta: eventMeta.
WithType(bridgev2.RemoteEventChatResync).
WithCreatePortal(true),
ChatInfo: &bridgev2.ChatInfo{ ChatInfo: &bridgev2.ChatInfo{
Name: &action.Title, Name: &action.Title,
Members: &bridgev2.ChatMemberList{ Members: &bridgev2.ChatMemberList{
@@ -262,9 +270,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
CanBackfill: true, CanBackfill: true,
}, },
}) })
eventMeta.Type = bridgev2.RemoteEventMessage
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventMessage),
ID: ids.GetMessageIDFromMessage(msg), ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
@@ -279,9 +286,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
}, },
}) })
case *tg.MessageActionSetMessagesTTL: case *tg.MessageActionSetMessagesTTL:
eventMeta.Type = bridgev2.RemoteEventChatResync
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventChatResync),
ChatInfo: &bridgev2.ChatInfo{ ChatInfo: &bridgev2.ChatInfo{
ExtraUpdates: func(ctx context.Context, p *bridgev2.Portal) bool { ExtraUpdates: func(ctx context.Context, p *bridgev2.Portal) bool {
updated := p.Portal.Metadata.(*PortalMetadata).MessagesTTL != action.Period updated := p.Portal.Metadata.(*PortalMetadata).MessagesTTL != action.Period
@@ -293,9 +299,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
// Send a notice about the TTL change // Send a notice about the TTL change
content := bridgev2.DisappearingMessageNotice(time.Duration(action.Period)*time.Second, false) content := bridgev2.DisappearingMessageNotice(time.Duration(action.Period)*time.Second, false)
eventMeta.Type = bridgev2.RemoteEventMessage
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventMessage),
ID: ids.GetMessageIDFromMessage(msg), ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
@@ -331,9 +336,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
body.WriteString(")") body.WriteString(")")
} }
eventMeta.Type = bridgev2.RemoteEventMessage
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventMessage),
ID: ids.GetMessageIDFromMessage(msg), ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
@@ -358,9 +362,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
body.WriteString(")") body.WriteString(")")
} }
eventMeta.Type = bridgev2.RemoteEventMessage
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventMessage),
ID: ids.GetMessageIDFromMessage(msg), ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
@@ -401,9 +404,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
} }
body.WriteString(" to the video chat") body.WriteString(" to the video chat")
html.WriteString(" to the video chat") html.WriteString(" to the video chat")
eventMeta.Type = bridgev2.RemoteEventMessage
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.WithType(bridgev2.RemoteEventMessage),
ID: ids.GetMessageIDFromMessage(msg), ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
@@ -425,11 +427,11 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
}) })
case *tg.MessageActionGroupCallScheduled: case *tg.MessageActionGroupCallScheduled:
start := time.Unix(int64(action.ScheduleDate), 0) start := time.Unix(int64(action.ScheduleDate), 0)
eventMeta.Type = bridgev2.RemoteEventMessage
eventMeta.Sender = bridgev2.EventSender{} // Telegram shows it as not coming from a specific user
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{
EventMeta: eventMeta, EventMeta: eventMeta.
ID: ids.GetMessageIDFromMessage(msg), WithType(bridgev2.RemoteEventMessage).
WithSender(bridgev2.EventSender{}), // Telegram shows it as not coming from a specific user
ID: ids.GetMessageIDFromMessage(msg),
ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) {
return &bridgev2.ConvertedMessage{ return &bridgev2.ConvertedMessage{
Parts: []*bridgev2.ConvertedMessagePart{ Parts: []*bridgev2.ConvertedMessagePart{
@@ -478,7 +480,6 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in
default: default:
return fmt.Errorf("unknown action type %T", action) return fmt.Errorf("unknown action type %T", action)
} }
t.main.Bridge.QueueRemoteEvent(t.userLogin, &chatInfoChange)
default: default:
return fmt.Errorf("unknown message type %T", msg) return fmt.Errorf("unknown message type %T", msg)