From ce8aa02c79c7744dce40abc933fe6278759d9456 Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 1 Jul 2024 16:02:26 +0300 Subject: [PATCH] change logic initialization tg client --- clients/telegram/tg.go | 136 +++++++++++++++++++++-------------------- go.mod | 2 +- go.sum | 2 + 3 files changed, 74 insertions(+), 66 deletions(-) diff --git a/clients/telegram/tg.go b/clients/telegram/tg.go index 74d7815..9610751 100644 --- a/clients/telegram/tg.go +++ b/clients/telegram/tg.go @@ -15,7 +15,7 @@ import ( type TelegramClient struct { repo *dal.DAL - TgClients []*client.Client + TgClients map[int64]*client.Client WaitingClients map[string]WaitingClient mu sync.Mutex } @@ -30,7 +30,7 @@ type WaitingClient struct { func NewTelegramClient(ctx context.Context, repo *dal.DAL) (*TelegramClient, error) { tgClient := &TelegramClient{ repo: repo, - TgClients: make([]*client.Client, 0), + TgClients: make(map[int64]*client.Client), WaitingClients: make(map[string]WaitingClient), } @@ -43,76 +43,82 @@ func NewTelegramClient(ctx context.Context, repo *dal.DAL) (*TelegramClient, err } for _, account := range allTgAccounts { - authorizer := client.ClientAuthorizerr() - authorizer.TdlibParameters <- &client.SetTdlibParametersRequest{ - UseTestDc: false, - DatabaseDirectory: filepath.Join(".tdlib", "database"), - FilesDirectory: filepath.Join(".tdlib", "files"), - UseFileDatabase: false, - UseChatInfoDatabase: false, - UseMessageDatabase: false, - UseSecretChats: false, - ApiId: account.ApiID, - ApiHash: account.ApiHash, - SystemLanguageCode: "en", - DeviceModel: "Server", - SystemVersion: "1.0.0", - ApplicationVersion: "1.0.0", - } - - _, err := client.SetLogVerbosityLevel(&client.SetLogVerbosityLevelRequest{ - NewVerbosityLevel: 1, - }) - if err != nil { - return nil, err - } - - var tdlibClient *client.Client - var goErr error - go func() { - tdlibClient, goErr = client.NewClient(authorizer) - if goErr != nil { - fmt.Println("new client failed", err) - return + if account.Status == model.ActiveTg { + authorizer := client.ClientAuthorizerr() + authorizer.TdlibParameters <- &client.SetTdlibParametersRequest{ + UseTestDc: false, + DatabaseDirectory: filepath.Join(".tdlib", "database"), + FilesDirectory: filepath.Join(".tdlib", "files"), + UseFileDatabase: false, + UseChatInfoDatabase: false, + UseMessageDatabase: false, + UseSecretChats: false, + ApiId: account.ApiID, + ApiHash: account.ApiHash, + SystemLanguageCode: "en", + DeviceModel: "Server", + SystemVersion: "1.0.0", + ApplicationVersion: "1.0.0", } - fmt.Println("i am down") - }() - if goErr != nil { - return nil, goErr - } - for { - state, ok := <-authorizer.State - if !ok { - break + _, err := client.SetLogVerbosityLevel(&client.SetLogVerbosityLevelRequest{ + NewVerbosityLevel: 1, + }) + if err != nil { + return nil, err } - fmt.Println("currnet state:", state) - switch state.AuthorizationStateType() { - case client.TypeAuthorizationStateWaitPhoneNumber: - authorizer.PhoneNumber <- account.PhoneNumber - case client.TypeAuthorizationStateWaitCode: - // todo inactive - case client.TypeAuthorizationStateLoggingOut, client.TypeAuthorizationStateClosing, client.TypeAuthorizationStateClosed: - // todo inactive - case client.TypeAuthorizationStateReady: - // костыль так как в либе тож костыль стоит пока там ьд обновиться будет ниловый всегда клиент - time.Sleep(3 * time.Second) - me, err := tdlibClient.GetMe() - if err != nil { - return nil, err + var tdlibClient *client.Client + var goErr error + go func() { + tdlibClient, goErr = client.NewClient(authorizer) + if goErr != nil { + fmt.Println("new client failed", err) + return + } + fmt.Println("i am down") + }() + if goErr != nil { + return nil, goErr + } + + for { + state, ok := <-authorizer.State + if !ok { + break + } + fmt.Println("currnet state:", state) + switch state.AuthorizationStateType() { + case client.TypeAuthorizationStateWaitPhoneNumber: + authorizer.PhoneNumber <- account.PhoneNumber + case client.TypeAuthorizationStateWaitCode: + err := tgClient.repo.TgRepo.UpdateStatusTg(ctx, account.ID, model.InactiveTg) + if err != nil { + return nil, err + } + case client.TypeAuthorizationStateLoggingOut, client.TypeAuthorizationStateClosing, client.TypeAuthorizationStateClosed: + err := tgClient.repo.TgRepo.UpdateStatusTg(ctx, account.ID, model.InactiveTg) + if err != nil { + return nil, err + } + case client.TypeAuthorizationStateReady: + // костыль так как в либе тож костыль стоит пока там ьд обновиться будет ниловый всегда клиент + time.Sleep(3 * time.Second) + me, err := tdlibClient.GetMe() + if err != nil { + return nil, err + } + fmt.Printf("Me: %s %s [%v]", me.FirstName, me.LastName, me.Usernames) + tgClient.mu.Lock() + tgClient.TgClients[account.ID] = tdlibClient + tgClient.mu.Unlock() + break + case client.TypeAuthorizationStateWaitPassword: + authorizer.Password <- account.Password } - fmt.Printf("Me: %s %s [%v]", me.FirstName, me.LastName, me.Usernames) - tgClient.mu.Lock() - tgClient.TgClients = append(tgClient.TgClients, tdlibClient) - tgClient.mu.Unlock() - break - case client.TypeAuthorizationStateWaitPassword: - authorizer.Password <- account.Password } } } - return tgClient, nil } @@ -143,11 +149,11 @@ func (tg *TelegramClient) GetFromMap(id string) (WaitingClient, bool) { func (tg *TelegramClient) SaveTgAccount(ctx context.Context, tdLibClient *client.Client, account model.TgAccount) (int64, error) { tg.mu.Lock() defer tg.mu.Unlock() - tg.TgClients = append(tg.TgClients, tdLibClient) id, err := tg.repo.TgRepo.CreateTgAccount(ctx, account) if err != nil { return 0, err } + tg.TgClients[id] = tdLibClient return id, nil } diff --git a/go.mod b/go.mod index 02d5ff2..2ae0f33 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( google.golang.org/grpc v1.64.0 google.golang.org/protobuf v1.34.2 penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c - penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240701091250-bf14e745201b + penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240701123546-6dbbc07f9c24 penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990 penahub.gitlab.yandexcloud.net/backend/tdlib v0.0.0-20240701075856-1731684c936f penahub.gitlab.yandexcloud.net/external/trashlog.git v0.1.2-0.20240615192328-b2f5dffe92ae diff --git a/go.sum b/go.sum index c700cbf..8edd934 100644 --- a/go.sum +++ b/go.sum @@ -287,6 +287,8 @@ penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5 penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c/go.mod h1:+bPxq2wfW5S1gd+83vZYmHm33AE7nEBfznWS8AM1TKE= penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240701091250-bf14e745201b h1:1ALCrJxIatwnqpIUJIx31Cq+rnxFa3WGEA8scV1idVo= penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240701091250-bf14e745201b/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240701123546-6dbbc07f9c24 h1:hcMtuK4H3dyk2Wo911EXRYcG8GV8hZe+UwuRRGOxF+I= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240701123546-6dbbc07f9c24/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0= penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990 h1:jiO8GWO+3sCnDAV8/NAV8tQIUwae/I6/xiDilW7zf0o= penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990/go.mod h1:zswBuTwmEsFHBVRu1nkG3/Fwylk5Vcm8OUm9iWxccSE= penahub.gitlab.yandexcloud.net/backend/tdlib v0.0.0-20240701075856-1731684c936f h1:Qli89wgu0T7nG4VECXZOZ40fjE/hVVfxF3hTaSYS008=