4.2 KiB
Autoreg Script Hardening — checklist для прожарки/написания волн-регераторов
Класс-уровень: применимо к ЛЮБОМУ масс-регеру (почта+OTP+прокси+стейт). Чек-лист багов, которые реально ловятся в бою.
1. State persistence — атомарная запись
save_state() = запись в path + ".tmp" → os.replace(tmp, path). Креш/kill посреди прямой записи = битый JSON = волна не резюмится с самого начала. os.replace атомарен на Windows и POSIX.
2. Прокси — dead-TTL, не вечный бан
Один сетевой таймаут ≠ мёртвый узел навсегда. Помечай d["dead_until"] = time.time() + 900, при выборе скипай только пока dead_until > now. Вечный блэклист за длинную волну съедает пул до нуля на транзиентных ошибках.
3. Курсор почтового пула — якорь по IDENTITY, не по индексу
Числовой mail_ptr ломается, когда список ящиков фильтруется между запусками (used-фильтр, dead-креды) — индексы съезжают → ящики скипаются или берутся повторно. Сохраняй last_mail (адрес) и при резюме ищи его индекс в ТЕКУЩЕМ отфильтрованном списке; числовой ptr — только fallback.
4. IMAP OTP — фильтр свежести + body fallback
- Парсь заголовок
Dateи отбрасывай письма старшеsince_ts - 90— иначе берётся вчерашний код от прошлой реги (регистрация фейлится молча/с непонятной ошибкой). - Нет
text/plainчасти → fallback наtext/html(некоторые провайдеры шлют только html). - По таймауту возвращай последний найденный кандидат (
fallback or ""), а не пустоту сразу.
5. Zero-quota health probe ключей
Дешёвая проверка живости API-ключа БЕЗ траты квоты: POST chat/completions с несуществующей моделью (probe/nonexistent-model-xyz). Интерпретация:
- 404 (model not found) = ключ ЖИВ
- 403 + "suspended" = аккаунт забанен
- 429 / "allowance" = квота выжрана (обычно восстанавливается за 24ч) GET /models при этом часто 200 даже на suspended — не годится. Используй probe в ротационных кронах/шлюзовых синках.
6. Конвейер, не партия
Антифрод провайдеров банит волны пачками через часы-сутки после регистрации (массовый 403 suspended — норма, не баг скрипта). Одиночный ключ = расходник. Правильная архитектура: непрерывная волна + cron-ротация живых в пул/шлюз (probe из п.5 → live в каналы, suspended в disable). Крон 15 мин — бан прилетает с задержкой, 30-минутное окно оставляет трупы в ротации.
7. Fail-stop волны
Счётчик подряд-фейлов: при >N фейлов и валящемся успехе — останавливать волну (обычно = сдох captcha-sidecar или весь прокси-пул), иначе тихо сжигается почтовый пул.
8. Шлюз new-api (если ключи идут в ротацию)
Канал-на-ключ, мульти-ключ блобом ломает Authorization (invalid header field value); \r из Windows-файлов ключей = та же ошибка; правки БД channels/abilities требуют systemctl restart. Детали — README llmtr-autoreg репо и memory-заметки по new-api.