Заказчик продвигает проекты в Telegram и пришёл за софтом для рассылки по группам, чатам и каналам.
Рассылали руками с нескольких аккаунтов.
Открыть чат, вставить текст, перейти в следующий - и так две сотни площадок за вечер.
К середине списка уже никто не помнил, куда отправлено, а куда нет.
Аккаунты регулярно ловили ограничения от Telegram за отправку подряд без пауз, дальше приходилось заводить новые номера.
Вторую часть задачи заказчик обозначил отдельно - продавать доступ к софту своим клиентам.
Управление собрано в самом Telegram-боте на Python и aiogram 3, отправка идёт через Telethon от лица подключённых аккаунтов.
Аккаунты добавляются по номеру и коду прямо в боте, сессии лежат зашифрованными на сервере.
Список площадок грузится файлом или пачкой ссылок, дубли и мёртвые ссылки отсеиваются на входе.
Очередь с паузами - интервал между отправками задаётся в настройках, поверх него случайный разброс, чтобы поток не выглядел машинным.
Лимиты на аккаунт в час и в сутки. Упёрся в лимит - аккаунт уходит отдыхать, очередь подхватывает следующий.
FloodWait от Telegram обрабатывается отдельно - бот ждёт ровно столько, сколько просит сервер, и не долбит повтором.
Отчёт по каждой рассылке - доставлено, отказ и причина отказа. Неудачные перезапускаются одной кнопкой, доставленные повторно не уходят.
Так-же сделал шаблоны с медиа и кнопками и спинтакс в тексте, чтобы в разные чаты уходили не одинаковые копии.
Продажа доступа сверху - тарифы по сроку, ключи активации, срок подписки на пользователя, панель владельца со списком клиентов и продлением вручную.
Хранение - SQLite, запуск на VPS через systemd, бэкап базы раз в сутки.
Рассылка на две сотни чатов уходит без участия человека - заказчик запускает её из бота и возвращается к готовому отчёту.
Аккаунты перестали улетать в ограничения, за первый месяц работы ни один не потерялся на лимитах.
Продажа доступа заработала сразу, клиенты получают ключ и работают в том же боте под своей подпиской.
Заказчик забрал исходники, ключи от сервера и пару абзацев, как добавлять аккаунты и заводить тарифы.
После сдачи доделал выгрузку отчёта в файл и отложенный старт по расписанию, чтобы рассылка уходила ночью без него.