Задача
Есть действующий Telegram-бот, который выдает аккаунты менеджерам (реализован на Telethon 2.0). В процессе эксплуатации обнаружено несколько системных дефектов, которые мешают работе. Требуется исправить их без изменения архитектуры бота.
Основные проблемы
- Дублирование аккаунтов: один и тот же аккаунт может быть загружен дважды - один раз через файл сессии, другой - через file tdata. Нужно сделать строгую дедупликацию по внутренним полям (account_id/account_hash).
- Пропажа прокси: периодически привязанные к аккаунтам прокси-серверы «исчезают» из базы данных (становятся NULL в записях). Необходимо добавить инвариантную привязку прокси на уровне модели и валидацию при сохранении.
- Неисправная кнопка отзыва: при нажатии кнопки «Отозвать аккаунт» у менеджера - аккаунт не возвращается в пул доступных. Кнопка должна запускать сценарий сброса состояния аккаунта (выдача = false, менеджер = null).
- Недостаточный контроль выдачи: аккаунт считается «выданным» сразу после назначения менеджеру, даже если код подтверждения еще не введён. Из-за этого менеджер забирает аккаунт, не успев войти, а отзыв возможен только через его подтверждение. Необходимо переделать логику: аккаунт считается занятым сразу физически (менаждер блокирует возможность другим получить), но бот должен позволять легко «слить» его обратно без дополнительных действий, если менеджер не завершил вход (timeout-сброс).
Технические ограничения
- Обязателен опыт работы с библиотекой Telethon версии 2.0+, понимание работы моделей User, Conversation, DLG.
- Код писать с активным использованием современного ИИ-инструмента (Codex, Copilot, GPT) - скорость и качество рефакторинга критичны.
- Бот написан на Python 3.10+, база данных - SQLite/PostgreSQL.
- Актуальная архитектура сохраняется: любые изменения делаются через патчи существующего кода, а не полное переписывание.
Ожидаемый результат
- Ни один аккаунт не может быть импортирован дважды - на этапе загрузки файла возвращать уведомление «аккаунт уже существует, операция отменена».
- Прокси для каждого аккаунта хранятся целостно. Бот не даёт сохранить аккаунт без прокси (текущие proxy,null заменяются последним действующим прокси менеджера или возращается ошибка «выберите прокси» перед выдачей).
- Кнопка «Отозвать» блокирует сессию менеджера в диалоге и мгновенно возвращает аккаунт в пул свободных.
- Выданные, но не введенные коды: бот помечает аккаунт ссылкой на менеджера, установливает статус waiting_code. Через настраиваемый промежуток (2-3 минуты с последнего действия) авторейдер либо кнопка «Забрать» отзывывает аккаунт обратно без участия другого админа.