From b16db743c01139d456c28b4452077bf3d9739414 Mon Sep 17 00:00:00 2001 From: antongospod <47962758+antongospod@users.noreply.github.com> Date: Thu, 9 Apr 2026 19:00:41 +0300 Subject: [PATCH] fix(129): manual captcha solving UNAUTHORIZED_RESTRICTION --- client/main.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/client/main.go b/client/main.go index 6186914..511a3bf 100644 --- a/client/main.go +++ b/client/main.go @@ -908,11 +908,6 @@ func getTokenChain(ctx context.Context, link string, streamID int, creds VKCrede var token2 string for attempt := 0; ; attempt++ { - solveMode, hasSolveMode := captchaSolveModeForAttempt(attempt, manualCaptcha, autoCaptchaSliderPOC) - if !hasSolveMode { - break - } - resp, err = doRequest(data, urlAddr) if err != nil { return "", "", "", err @@ -921,6 +916,21 @@ func getTokenChain(ctx context.Context, link string, streamID int, creds VKCrede if errObj, hasErr := resp["error"].(map[string]interface{}); hasErr { captchaErr := ParseVkCaptchaError(errObj) if captchaErr != nil && captchaErr.IsCaptchaError() { + solveMode, hasSolveMode := captchaSolveModeForAttempt(attempt, manualCaptcha, autoCaptchaSliderPOC) + if !hasSolveMode { + log.Printf("[STREAM %d] [Captcha] No more solve modes available (attempt %d)", streamID, attempt+1) + + // Engage global lockout to protect API + globalCaptchaLockout.Store(time.Now().Add(60 * time.Second).Unix()) + + if connectedStreams.Load() == 0 { + log.Printf("[STREAM %d] [FATAL] 0 connected streams and captcha solve modes exhausted.", streamID) + return "", "", "", fmt.Errorf("FATAL_CAPTCHA_FAILED_NO_STREAMS") + } + + return "", "", "", fmt.Errorf("CAPTCHA_WAIT_REQUIRED") + } + var successToken string var captchaKey string var solveErr error