package processor import ( "context" "log" "spider/internal/crawler" "spider/internal/model" ) // TMeChecker filters dead TG accounts via HTTP t.me page scraping. // Free, unlimited, 100% accurate. type TMeChecker struct { validator *crawler.TMeValidator } // NewTMeChecker creates a new TMeChecker. func NewTMeChecker() *TMeChecker { return &TMeChecker{validator: crawler.NewTMeValidator()} } // Filter checks each raw merchant's tg_username against t.me. // Returns alive merchants; dead ones are returned separately with status="invalid". func (c *TMeChecker) Filter(ctx context.Context, raws []model.MerchantRaw) (alive []model.MerchantRaw, dead []model.MerchantRaw) { for _, raw := range raws { if ctx.Err() != nil { break } if raw.TgUsername == "" { alive = append(alive, raw) continue } if c.validator.IsAlive(ctx, raw.TgUsername) { alive = append(alive, raw) } else { log.Printf("[tmechecker] dead: @%s", raw.TgUsername) dead = append(dead, raw) } } return }