diff --git a/pkg/connector/backfill.go b/pkg/connector/backfill.go index 5a33a098..f7c27ea3 100644 --- a/pkg/connector/backfill.go +++ b/pkg/connector/backfill.go @@ -276,13 +276,9 @@ func (t *TelegramClient) FetchMessages(ctx context.Context, fetchParams bridgev2 backfillMessage.Reactions = append(backfillMessage.Reactions, &bridgev2.BackfillReaction{ Timestamp: time.Unix(int64(reaction.Date), 0), - Sender: bridgev2.EventSender{ - IsFromMe: peer.UserID == t.telegramUserID, - SenderLogin: ids.MakeUserLoginID(peer.UserID), - Sender: ids.MakeUserID(peer.UserID), - }, - EmojiID: emojiID, - Emoji: emoji, + Sender: t.senderForUserID(peer.UserID), + EmojiID: emojiID, + Emoji: emoji, }) } diff --git a/pkg/connector/chatinfo.go b/pkg/connector/chatinfo.go index 02f15c2f..2c46e8bb 100644 --- a/pkg/connector/chatinfo.go +++ b/pkg/connector/chatinfo.go @@ -108,11 +108,7 @@ func (t *TelegramClient) filterChannelParticipants(chatParticipants []tg.Channel } members = append(members, bridgev2.ChatMember{ - EventSender: bridgev2.EventSender{ - IsFromMe: userIDable.GetUserID() == t.telegramUserID, - SenderLogin: ids.MakeUserLoginID(userIDable.GetUserID()), - Sender: ids.MakeUserID(userIDable.GetUserID()), - }, + EventSender: t.senderForUserID(userIDable.GetUserID()), }) if len(members) >= limit { @@ -167,13 +163,8 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta continue } - sender := ids.MakeUserID(user.GetUserID()) - chatInfo.Members.MemberMap[sender] = bridgev2.ChatMember{ - EventSender: bridgev2.EventSender{ - IsFromMe: user.GetUserID() == t.telegramUserID, - SenderLogin: ids.MakeUserLoginID(user.GetUserID()), - Sender: sender, - }, + chatInfo.Members.MemberMap[ids.MakeUserID(user.GetUserID())] = bridgev2.ChatMember{ + EventSender: t.senderForUserID(user.GetUserID()), } if len(chatInfo.Members.MemberMap) >= t.main.Config.MemberList.NormalizedMaxInitialSync() { diff --git a/pkg/connector/client.go b/pkg/connector/client.go index c5f562c7..956dded5 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -565,3 +565,11 @@ func (t *TelegramClient) mySender() bridgev2.EventSender { Sender: t.userID, } } + +func (t *TelegramClient) senderForUserID(userID int64) bridgev2.EventSender { + return bridgev2.EventSender{ + IsFromMe: userID == t.telegramUserID, + SenderLogin: ids.MakeUserLoginID(userID), + Sender: ids.MakeUserID(userID), + } +} diff --git a/pkg/connector/reactions.go b/pkg/connector/reactions.go index f9fad240..3f380c1d 100644 --- a/pkg/connector/reactions.go +++ b/pkg/connector/reactions.go @@ -135,13 +135,9 @@ func (t *TelegramClient) handleTelegramReactions(ctx context.Context, msg *tg.Me users[userID].Reactions = append(users[userID].Reactions, &bridgev2.BackfillReaction{ Timestamp: time.Unix(int64(reaction.Date), 0), - Sender: bridgev2.EventSender{ - IsFromMe: peer.UserID == t.telegramUserID, - SenderLogin: ids.MakeUserLoginID(peer.UserID), - Sender: userID, - }, - EmojiID: emojiID, - Emoji: emoji, + Sender: t.senderForUserID(peer.UserID), + EmojiID: emojiID, + Emoji: emoji, }) } diff --git a/pkg/connector/telegram.go b/pkg/connector/telegram.go index a5fa7c7d..8c7816be 100644 --- a/pkg/connector/telegram.go +++ b/pkg/connector/telegram.go @@ -196,8 +196,46 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, channels map[in }, }, } - // case *tg.MessageActionChatCreate: - // case *tg.MessageActionChannelCreate: + case *tg.MessageActionChatCreate: + memberMap := map[networkid.UserID]bridgev2.ChatMember{} + for _, userID := range action.Users { + memberMap[ids.MakeUserID(userID)] = bridgev2.ChatMember{ + EventSender: t.senderForUserID(userID), + Membership: event.MembershipJoin, + } + } + + eventMeta.Type = bridgev2.RemoteEventChatResync + eventMeta.CreatePortal = true + t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{ + EventMeta: eventMeta, + ChatInfo: &bridgev2.ChatInfo{ + Name: &action.Title, + Members: &bridgev2.ChatMemberList{ + IsFull: true, + TotalMemberCount: len(action.Users), + MemberMap: memberMap, + }, + }, + }) + + case *tg.MessageActionChannelCreate: + eventMeta.Type = bridgev2.RemoteEventChatResync + eventMeta.CreatePortal = true + t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.ChatResync{ + EventMeta: eventMeta, + ChatInfo: &bridgev2.ChatInfo{ + Name: &action.Title, + Members: &bridgev2.ChatMemberList{ + MemberMap: map[networkid.UserID]bridgev2.ChatMember{ + t.userID: { + EventSender: t.mySender(), + Membership: event.MembershipJoin, + }, + }, + }, + }, + }) // case *tg.MessageActionChatMigrateTo: // case *tg.MessageActionChannelMigrateFrom: // case *tg.MessageActionPinMessage: