Я очень люблю аудиокниги. Но в последнее время слушать их легально (и удобно) стало той еще болью. То книга внезапно пропадает из библиотеки сервиса из-за истекших авторских прав, то приложение для прослушивания обрастает ненужными функциями и начинает весить как AAA-игра, то скачанные с торрентов гигабайтные архивы забивают всю память смартфона.
Я перепробовал десяток офлайн-плееров, но везде натыкался на компромиссы: нет синхронизации между устройствами, слетает прогресс, неудобно закидывать файлы. В какой-то момент я посмотрел на Telegram с его безлимитным облаком и подумал: почему бы не сделать из него идеальный плеер?
Так появился StoryTune.
Долгое время этот бот жил в закрытом режиме — как элитная библиотека «только для своих». Мы с друзьями переварили через него терабайты аудио, отловили сотни багов, переписали архитектуру и довели UX до ума. Продукт получился настолько стабильным и ламповым, что держать его взаперти стало просто неправильно.
Сегодня я открываю двери бота для всех желающих и хочу рассказать, какие фичи в него заложены и какие архитектурные грабли (особенно с UI в Telegram) пришлось собрать при разработке на aiogram 3.
Главная идея бота: вы — единственный хозяин своей библиотеки.
Находите любую аудиокнигу в MP3 (старые радиоспектакли, редкие лекции, инди-чтецы, рутрекер), скидываете файлы боту, а он сам сортирует их по алфавиту и собирает в аккуратную карточку книги. Файлы лежат на серверах Дурова, память вашего устройства свободна, а слушать можно с чего угодно — хоть с телефона, хоть с рабочего макбука, хоть с умных часов.
🚀 Главные киллер-фичи (почему не просто «Избранное»)
Многие спросят: «Зачем бот, если можно просто кидать музыку в Избранное?». Отвечаю: Избранное не запоминает, на какой секунде вы остановились в третьей главе из пятидесяти. А мы добавили еще несколько вещей, которых нам критически не хватало.
1. Умные заметки с таймкодами
Слушаете сложный нон-фикшн, и тут звучит гениальная мысль. Куда её записать? В StoryTune вы прямо во время прослушивания жмете «Добавить заметку» и пишете: 14:20 - Очень крутая метафора про архитектуру. Бот сохранит её под текущей главой, а таймкод станет кликабельным. Нажали — и аудио запустилось ровно с нужной секунды.

2. Бесшовный UI и победа над кнопкой «Назад»
Больше всего в Telegram-ботах бесит, когда при каждом нажатии кнопки старое сообщение удаляется, а новое прилетает снизу, заставляя экран дергаться. Мы заморочились и сделали настоящий State Machine UI. Все меню редактируются «по месту» (edit_message_text / edit_message_caption), интерфейс ощущается как нативное приложение.
А еще мы решили классическую боль — навигацию и кнопку «Назад». Лимит Telegram на callback_data — всего 64 байта. Как боту понять, откуда юзер открыл книгу — из результатов поиска, из папки «Прочитанное» или со своей полки «Фантастика»? Мы реализовали передачу суффиксов в коллбеках (например, book_123_shelf_5) и сохранение контекста (origin) в Redis FSM. Теперь кнопка «Назад» обладает интеллектом и всегда возвращает вас именно туда, откуда вы пришли.
3. Полки и «Тайная комната»
Когда загружаешь 50 книг, начинается хаос. Поэтому мы добавили папки — «Полки». Можно раскидать всё по категориям.
А для тех, кто любит слушать специфическую литературу (guilty pleasure, так сказать), есть режим «Скрытых книг». Книга убирается в «Тайную комнату» и исчезает с главного экрана, чтобы обложка какого-нибудь бульварного романа случайно не засветилась, когда вы открываете бота в метро.

4. Inline-шеринг (Магия вне Хогвартса)
Допустим, вы хотите посоветовать аудиокнигу другу. Вам не нужно кидать ему 50 MP3-файлов или заставлять его искать её в боте.
Вы просто открываете диалог с другом, пишете @storytunebot, и над клавиатурой всплывает ваша личная библиотека. Выбираете книгу, и она улетает в чат в виде красивой плашки. Друг жмет кнопку — и вся книга (без вашего личного прогресса) мгновенно копируется к нему на полку.

Кстати, для авторов и инди-чтецов мы предусмотрели «Приватные ссылки». Если вы раздаете свою авторскую книгу, бот наложит на неё ограничения Telegram (protect_content=True) — аудиофайлы нельзя будет скачать в кэш телефона или переслать кому-то еще. Ссылками можно делиться как через inline, так и напрямую из меню книги.

5. Детальная статистика, геймификация и загрузка в два клика
Мы обожаем анализировать свои достижения, поэтому в бота зашита мощная система статистики. Он не просто скучно считает часы и минуты за неделю или за всё время. Мы добавили немного магии:
-
Конвертация в страницы: бот переводит часы прослушивания в эквивалент прочитанных бумажных страниц (исходя из того, что 1 час аудио ≈ 35 страниц).
-
Магический шар и темп: алгоритм анализирует вашу скорость прослушивания конкретной книги и выдает прогноз — в какой именно день вы её закончите.
-
Стрики и система рангов: бот отслеживает ваши ежедневные серии (непрерывные дни прослушивания) и повышает вас в звании — от
🎧 Начинающего слушателядо🌌 Хранителя библиотеки. Это отлично мотивирует не забрасывать длинные циклы.
Ранги
А чтобы ваша библиотека пополнялась без боли, процесс добавления новой книги сведен к буквально двум кликам. Никаких сложных веб-форм, архиваторов или возни с тегами. Вы просто жмете «Добавить книгу», вводите название и выделяете разом хоть 50 MP3-файлов (с компьютера или просто пересылаете из другого канала).
Бот сам всё подхватит, мгновенно загрузит, отсортирует файлы по алфавиту названий и соберет в аккуратную аудиокнигу. А благодаря нашей системе кэширования и инлайн-шерингу, о котором я писал выше, обмен книгами с друзьями происходит просто молниеносно — ваша огромная библиотека всегда лежит в кармане, не занимая ни мегабайта памяти смартфона.
🛠 Что под капотом (немного гиковской радости)
Чтобы всё это работало быстро и не падало под нагрузкой, мы выбрали классический, но мощный асинхронный стек:
-
Python 3.12
-
Aiogram 3 — мощная маршрутизация и система Middleware (например, для rate-лимитов и антиспама кнопок).
-
PostgreSQL + asyncpg — используем пулы соединений с защитой от отвала базы.
-
Redis — сердце нашего State Machine UI, хранение FSM-стейтов и быстрое кэширование запросов.
-
Вебхуки на aiohttp — бот работает не через polling, а через webhook, что обеспечивает моментальный отклик.
Итог
В итоге из пет-проекта получился быстрый, надежный и абсолютно бесплатный инструмент, проверенный временем и закрытым комьюнити. Никаких лимитов на размер библиотек, никакой рекламы и никаких подписок (только подписка на официальный канал бота — это единственный барьер).
Пощупать бота, ради которого всё это затевалось, и начать собирать свою библиотеку можно тут: 👉 Бот StoryTune (@storytunebot)
📖 Подробная инструкция по функционалу
Если вы хотите обсудить фичи, поделиться крутыми книгами или подкинуть идеи для развития — залетайте к нам в Книжный Форум (там мы часто обмениваемся редкими аудиокнигами).
Буду очень рад вашему фидбеку в комментариях! Как вам идея? Чего, по-вашему, еще не хватает в интерфейсе бота для звания идеального аудио-плеера?
Автор: storytune


