chat metadata: bridge join/leave events TG -> Matrix
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
+54
-38
@@ -12,6 +12,7 @@ import (
|
|||||||
"maunium.net/go/mautrix/bridgev2/database"
|
"maunium.net/go/mautrix/bridgev2/database"
|
||||||
"maunium.net/go/mautrix/bridgev2/networkid"
|
"maunium.net/go/mautrix/bridgev2/networkid"
|
||||||
"maunium.net/go/mautrix/bridgev2/simplevent"
|
"maunium.net/go/mautrix/bridgev2/simplevent"
|
||||||
|
"maunium.net/go/mautrix/event"
|
||||||
|
|
||||||
"go.mau.fi/mautrix-telegram/pkg/connector/emojis"
|
"go.mau.fi/mautrix-telegram/pkg/connector/emojis"
|
||||||
"go.mau.fi/mautrix-telegram/pkg/connector/ids"
|
"go.mau.fi/mautrix-telegram/pkg/connector/ids"
|
||||||
@@ -50,7 +51,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, update IGetMess
|
|||||||
Int("message_id", msg.GetID()).
|
Int("message_id", msg.GetID()).
|
||||||
Str("sender", string(sender.Sender)).
|
Str("sender", string(sender.Sender)).
|
||||||
Str("sender_login", string(sender.SenderLogin)).
|
Str("sender_login", string(sender.SenderLogin)).
|
||||||
Bool("is_from_me", sender.IsFromMe)
|
Bool("is_from_me", sender.IsFromMe).
|
||||||
|
Stringer("peer_id", msg.PeerID)
|
||||||
},
|
},
|
||||||
Sender: sender,
|
Sender: sender,
|
||||||
PortalKey: ids.MakePortalKey(msg.PeerID),
|
PortalKey: ids.MakePortalKey(msg.PeerID),
|
||||||
@@ -63,50 +65,63 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, update IGetMess
|
|||||||
})
|
})
|
||||||
case *tg.MessageService:
|
case *tg.MessageService:
|
||||||
sender := t.getEventSender(msg)
|
sender := t.getEventSender(msg)
|
||||||
portalKey := ids.MakePortalKey(msg.PeerID)
|
|
||||||
|
chatInfoChange := simplevent.ChatInfoChange{
|
||||||
|
EventMeta: simplevent.EventMeta{
|
||||||
|
Type: bridgev2.RemoteEventChatInfoChange,
|
||||||
|
PortalKey: ids.MakePortalKey(msg.PeerID),
|
||||||
|
Sender: sender,
|
||||||
|
Timestamp: time.Unix(int64(msg.Date), 0),
|
||||||
|
LogContext: func(c zerolog.Context) zerolog.Context {
|
||||||
|
return c.
|
||||||
|
Int("message_id", msg.GetID()).
|
||||||
|
Str("sender", string(sender.Sender)).
|
||||||
|
Str("sender_login", string(sender.SenderLogin)).
|
||||||
|
Bool("is_from_me", sender.IsFromMe).
|
||||||
|
Stringer("peer_id", msg.PeerID)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ChatInfoChange: &bridgev2.ChatInfoChange{},
|
||||||
|
}
|
||||||
|
|
||||||
switch action := msg.Action.(type) {
|
switch action := msg.Action.(type) {
|
||||||
case *tg.MessageActionChatEditTitle:
|
case *tg.MessageActionChatEditTitle:
|
||||||
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
|
chatInfoChange.ChatInfoChange.ChatInfo = &bridgev2.ChatInfo{Name: &action.Title}
|
||||||
EventMeta: simplevent.EventMeta{
|
|
||||||
Type: bridgev2.RemoteEventChatInfoChange,
|
|
||||||
PortalKey: portalKey,
|
|
||||||
Sender: sender,
|
|
||||||
Timestamp: time.Unix(int64(msg.Date), 0),
|
|
||||||
},
|
|
||||||
ChatInfoChange: &bridgev2.ChatInfoChange{
|
|
||||||
ChatInfo: &bridgev2.ChatInfo{Name: &action.Title},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
case *tg.MessageActionChatEditPhoto:
|
case *tg.MessageActionChatEditPhoto:
|
||||||
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
|
chatInfoChange.ChatInfoChange.ChatInfo = &bridgev2.ChatInfo{Avatar: t.avatarFromPhoto(action.Photo)}
|
||||||
EventMeta: simplevent.EventMeta{
|
case *tg.MessageActionChatDeletePhoto:
|
||||||
Type: bridgev2.RemoteEventChatInfoChange,
|
chatInfoChange.ChatInfoChange.ChatInfo = &bridgev2.ChatInfo{Avatar: &bridgev2.Avatar{Remove: true}}
|
||||||
PortalKey: portalKey,
|
case *tg.MessageActionChatAddUser:
|
||||||
Sender: sender,
|
var members []bridgev2.ChatMember
|
||||||
Timestamp: time.Unix(int64(msg.Date), 0),
|
for _, userID := range action.Users {
|
||||||
|
members = append(members, bridgev2.ChatMember{
|
||||||
|
EventSender: bridgev2.EventSender{
|
||||||
|
SenderLogin: ids.MakeUserLoginID(userID),
|
||||||
|
Sender: ids.MakeUserID(userID),
|
||||||
|
},
|
||||||
|
Membership: event.MembershipJoin,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
chatInfoChange.ChatInfoChange.MemberChanges = &bridgev2.ChatMemberList{Members: members}
|
||||||
|
case *tg.MessageActionChatJoinedByLink:
|
||||||
|
chatInfoChange.ChatInfoChange.MemberChanges = &bridgev2.ChatMemberList{
|
||||||
|
Members: []bridgev2.ChatMember{
|
||||||
|
{EventSender: sender, Membership: event.MembershipJoin},
|
||||||
},
|
},
|
||||||
ChatInfoChange: &bridgev2.ChatInfoChange{
|
}
|
||||||
ChatInfo: &bridgev2.ChatInfo{
|
case *tg.MessageActionChatDeleteUser:
|
||||||
Avatar: t.avatarFromPhoto(action.Photo),
|
chatInfoChange.ChatInfoChange.MemberChanges = &bridgev2.ChatMemberList{
|
||||||
|
Members: []bridgev2.ChatMember{
|
||||||
|
{
|
||||||
|
EventSender: bridgev2.EventSender{
|
||||||
|
SenderLogin: ids.MakeUserLoginID(action.UserID),
|
||||||
|
Sender: ids.MakeUserID(action.UserID),
|
||||||
|
},
|
||||||
|
Membership: event.MembershipLeave,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
}
|
||||||
case *tg.MessageActionChatDeletePhoto:
|
|
||||||
t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatInfoChange{
|
|
||||||
EventMeta: simplevent.EventMeta{
|
|
||||||
Type: bridgev2.RemoteEventChatInfoChange,
|
|
||||||
PortalKey: portalKey,
|
|
||||||
Sender: sender,
|
|
||||||
Timestamp: time.Unix(int64(msg.Date), 0),
|
|
||||||
},
|
|
||||||
ChatInfoChange: &bridgev2.ChatInfoChange{
|
|
||||||
ChatInfo: &bridgev2.ChatInfo{Avatar: &bridgev2.Avatar{Remove: true}},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
// case *tg.MessageActionChatCreate:
|
// case *tg.MessageActionChatCreate:
|
||||||
// case *tg.MessageActionChatAddUser:
|
|
||||||
// case *tg.MessageActionChatDeleteUser:
|
|
||||||
// case *tg.MessageActionChatJoinedByLink:
|
|
||||||
// case *tg.MessageActionChannelCreate:
|
// case *tg.MessageActionChannelCreate:
|
||||||
// case *tg.MessageActionChatMigrateTo:
|
// case *tg.MessageActionChatMigrateTo:
|
||||||
// case *tg.MessageActionChannelMigrateFrom:
|
// case *tg.MessageActionChannelMigrateFrom:
|
||||||
@@ -145,6 +160,7 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, update IGetMess
|
|||||||
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user