Добавить в корзинуПозвонить
Найти в Дзене
Будни аналитика

📊 ReadBot стал мультипользовательским.

83 теста, 4 сессии, 0 перепутанных постов Изначально ReadBot делал одно: загружаешь книгу — он режет её на посты и публикует в твой Telegram-канал. Один человек, одна книга, один канал. Всё работало, и для личного инструмента этого было достаточно. Потом появился второй пользователь. А вместе с ним — главный вопрос мультипользовательской архитектуры: как гарантировать, что посты одного человека никогда не попадут в канал другого? --- Когда проектируешь мультипользовательский Telegram-бот, самая болезненная ошибка — не падение сервера и не медленная работа. Самое страшное — когда данные перемешиваются. Один раз чужой пост оказывается в чужом канале — и доверие к инструменту испаряется мгновенно. Задача была сформулирована конкретно: два пользователя загружают книги одновременно — посты идут строго каждому в свой канал, без пересечений, при любой нагрузке, в том числе при сбоях. Решение искали не в прикладной логике уровня «если пользователь А — публикуй в канал А». Такие проверки ненад

83 теста, 4 сессии, 0 перепутанных постов

Изначально ReadBot делал одно: загружаешь книгу — он режет её на посты и публикует в твой Telegram-канал. Один человек, одна книга, один канал. Всё работало, и для личного инструмента этого было достаточно.

Потом появился второй пользователь. А вместе с ним — главный вопрос мультипользовательской архитектуры: как гарантировать, что посты одного человека никогда не попадут в канал другого?

---

Когда проектируешь мультипользовательский Telegram-бот, самая болезненная ошибка — не падение сервера и не медленная работа. Самое страшное — когда данные перемешиваются. Один раз чужой пост оказывается в чужом канале — и доверие к инструменту испаряется мгновенно.

Задача была сформулирована конкретно: два пользователя загружают книги одновременно — посты идут строго каждому в свой канал, без пересечений, при любой нагрузке, в том числе при сбоях.

Решение искали не в прикладной логике уровня «если пользователь А — публикуй в канал А». Такие проверки ненадёжны: стоит одному условию не сработать, и данные смешаются. Изоляция должна быть на уровне архитектуры.

Стек: FastAPI + aiogram + SQLite + asyncio.Queue. Ключевое решение — у каждого пользователя своя очередь задач. asyncio Python изолирует потоки на уровне рантайма: данные пользователя А физически находятся в другой очереди, чем данные пользователя Б. Они не могут встретиться — не потому что написана проверка «не трогай чужое», а потому что никогда не оказываются в одном потоке.

Состояние каждой сессии хранится в SQLite — отдельная запись для каждого пользователя, с привязкой к его Telegram ID и его каналу. Даже если 2 запроса придут в одну миллисекунду, каждый найдёт свой контекст и пойдёт по своему пути.

Написано 83 теста. Они проверяют именно это: одновременная загрузка двух книг, прерывание сессии на середине, переключение между задачами, сбой соединения посреди публикации. Все 83 — зелёные. 4 параллельные сессии работали без единого перекрёстного поста.

---

Параллельно с многопользовательностью появился режим /analyze. Загружаешь PDF, DOCX или TXT, пишешь задание в свободной форме — и получаешь ответ прямо в Telegram-чат. Разбор главы, выжимка тезисов, анализ договора — всё это обрабатывает AI-агент на базе Claude Code.

Режим встроен в того же бота с той же изоляцией очередей. Каждый пользователь видит только свои результаты. По сути — полноценный инструмент анализа текста внутри Telegram, без веб-интерфейса и без отдельного сервиса.

По затратам: весь процессинг работает через подписку Claude Code. Пока компьютер включён — бот работает. Это не «бесплатно навсегда» — это значит, что стоимость автоматизации контента складывается из подписки, а не из платы за каждый запрос. Для регулярной работы с текстами это принципиальная разница.

---

4 сессии работы AI-команды — это примерно неделя. Нейросетевые агенты писали код, тесты, документацию. Человек ставил архитектурные задачи, принимал решения, проверял результат.

🔧 Переход от однопользовательской к мультипользовательской модели — это не «добавить поле с логином». Это переписать слой взаимодействия с очередями, продумать хранение состояния в SQLite, убедиться, что asyncio не создаёт гонки данных при параллельных запросах. 83 теста — не паранойя. Это минимальный порог, при котором можно утверждать: изоляция работает.

Это не стартап с инвестициями и не продукт с командой разработчиков. Это итерационная разработка силами AI-агентов — от личного инструмента к тому, чем может пользоваться несколько человек одновременно.

Следующий этап — расширение числа пользователей и тестирование с реальными каналами в боевых условиях. Не в контролируемой среде, а когда реальный человек ждёт, что его книга превратится в посты без сюрпризов.

Бот для тестирования опубликую позже.