package workers import ( "context" "gitea.pena/SQuiz/common/dal" "github.com/go-redis/redis/v8" "time" ) type Deps struct { BotID int64 Redis *redis.Client Dal *dal.DAL //TgClient *telegram.TelegramClient } type TgListenerWorker struct { botID int64 redis *redis.Client dal *dal.DAL //tgClient *telegram.TelegramClient } func NewTgListenerWC(deps Deps) *TgListenerWorker { return &TgListenerWorker{ botID: deps.BotID, redis: deps.Redis, dal: deps.Dal, //tgClient: deps.TgClient, } } func (wc *TgListenerWorker) Start(ctx context.Context) { ticker := time.NewTicker(10 * time.Second) //time.Minute defer ticker.Stop() for { select { case <-ticker.C: wc.processTasks(ctx) case <-ctx.Done(): return } } } func (wc *TgListenerWorker) processTasks(ctx context.Context) { //var cursor uint64 //for { // var keys []string // var err error // keys, cursor, err = wc.redis.Scan(ctx, cursor, "telegram_task:*", 0).Result() // if err != nil { // fmt.Println("Failed scan for telegram tasks:", err) // break // } // // for _, key := range keys { // func() { // taskBytes, err := wc.redis.GetDel(ctx, key).Result() // if err == redis.Nil { // return // } else if err != nil { // fmt.Println("Failed getdel telegram task:", err) // return // } // // todo logging into tg with trashlog // var aimErr error // defer func() { // if r := recover(); r != nil || aimErr != nil { // fmt.Println("recovering from panic or error setting redis value:", r, aimErr) // _ = wc.redis.Set(ctx, key, taskBytes, 0).Err() // } // }() // // var task model.TgRedisTask // if err = json.Unmarshal([]byte(taskBytes), &task); err != nil { // fmt.Println("Failed unmarshal telegram task:", err) // return // } // // var inviteLink string // var chatID int64 // inviteLink, chatID, aimErr = wc.tgClient.CreateChannel(task.Name, wc.botID) // if aimErr != nil { // fmt.Println("Failed create tg channel:", aimErr) // return // } // // _, aimErr = wc.dal.AccountRepo.PostLeadTarget(ctx, model.LeadTarget{ // AccountID: task.AccountID, // Type: model.LeadTargetTg, // QuizID: task.QuizID, // Target: strconv.Itoa(int(chatID)), // InviteLink: inviteLink, // }) // if aimErr != nil { // fmt.Println("Failed create lead target in db:", aimErr) // return // } // }() // } // if cursor == 0 { // break // } //} }