reactions: support deletions

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-07-05 17:45:37 -06:00
parent a63f264804
commit 7e680f1fee
5 changed files with 181 additions and 58 deletions
+28 -24
View File
@@ -4,7 +4,6 @@ import (
"context"
"errors"
"fmt"
"strconv"
"strings"
"sync"
@@ -24,14 +23,19 @@ import (
)
type TelegramClient struct {
main *TelegramConnector
loginID int64
userLogin *bridgev2.UserLogin
client *telegram.Client
clientCancel context.CancelFunc
msgConv *msgconv.MessageConverter
main *TelegramConnector
telegramUserID int64
loginID networkid.UserLoginID
userID networkid.UserID
userLogin *bridgev2.UserLogin
client *telegram.Client
clientCancel context.CancelFunc
msgConv *msgconv.MessageConverter
reactionMessageLocks map[int]*sync.Mutex
appConfig map[string]any
appConfigHash int
}
var (
@@ -74,22 +78,24 @@ func (u UpdateDispatcher) Handle(ctx context.Context, updates tg.UpdatesClass) e
}
func NewTelegramClient(ctx context.Context, tc *TelegramConnector, login *bridgev2.UserLogin) (*TelegramClient, error) {
loginID, err := strconv.ParseInt(string(login.ID), 10, 64)
telegramUserID, err := ids.ParseUserLoginID(login.ID)
if err != nil {
return nil, err
}
log := zerolog.Ctx(ctx).With().
Str("component", "telegram_client").
Int64("login_id", loginID).
Str("user_login_id", string(login.ID)).
Logger()
zaplog := zap.New(zerozap.New(log))
client := TelegramClient{
main: tc,
loginID: loginID,
userLogin: login,
main: tc,
telegramUserID: telegramUserID,
loginID: login.ID,
userID: networkid.UserID(login.ID),
userLogin: login,
}
dispatcher := UpdateDispatcher{
UpdateDispatcher: tg.NewUpdateDispatcher(),
@@ -101,7 +107,7 @@ func NewTelegramClient(ctx context.Context, tc *TelegramConnector, login *bridge
dispatcher.OnDeleteMessages(client.onDeleteMessages)
dispatcher.OnEditMessage(client.onMessageEdit)
store := tc.Store.GetScopedStore(loginID)
store := tc.Store.GetScopedStore(telegramUserID)
updatesManager := updates.New(updates.Config{
OnChannelTooLong: func(channelID int64) {
@@ -123,7 +129,7 @@ func NewTelegramClient(ctx context.Context, tc *TelegramConnector, login *bridge
client.clientCancel, err = connectTelegramClient(ctx, client.client)
client.reactionMessageLocks = map[int]*sync.Mutex{}
go func() {
err = updatesManager.Run(ctx, client.client.API(), loginID, updates.AuthOptions{})
err = updatesManager.Run(ctx, client.client.API(), telegramUserID, updates.AuthOptions{})
if err != nil {
log.Err(err).Msg("updates manager error")
client.clientCancel()
@@ -165,9 +171,6 @@ func connectTelegramClient(ctx context.Context, client *telegram.Client) (contex
return cancel, nil
}
func (t *TelegramClient) Connect(ctx context.Context) (err error) {
t.clientCancel, err = connectTelegramClient(ctx, t.client)
return
@@ -213,8 +216,8 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta
{
EventSender: bridgev2.EventSender{
IsFromMe: true,
SenderLogin: ids.MakeUserLoginID(t.loginID),
Sender: ids.MakeUserID(t.loginID),
SenderLogin: t.loginID,
Sender: t.userID,
},
},
}
@@ -250,7 +253,7 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta
for _, user := range fullChat.Users {
memberList.Members = append(memberList.Members, bridgev2.ChatMember{
EventSender: bridgev2.EventSender{
IsFromMe: user.GetID() == t.loginID,
IsFromMe: user.GetID() == t.telegramUserID,
SenderLogin: ids.MakeUserLoginID(user.GetID()),
Sender: ids.MakeUserID(user.GetID()),
},
@@ -316,10 +319,11 @@ 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,
IsBot: &user.Bot,
Name: &name,
Avatar: avatar,
Identifiers: identifiers,
ExtraUpdates: bridgev2.SimpleMetadataUpdater[*bridgev2.Ghost]("fi.mau.telegram.is_premium", user.Premium),
}, nil
}