Как слушать аудиокниги в Telegram без боли: история создания идеального облачного плеера на Python. aiogram.. aiogram. python.. aiogram. python. telegram.. aiogram. python. telegram. аудиокниги.. aiogram. python. telegram. аудиокниги. книги.. aiogram. python. telegram. аудиокниги. книги. Мессенджеры.. aiogram. python. telegram. аудиокниги. книги. Мессенджеры. подкасты.. aiogram. python. telegram. аудиокниги. книги. Мессенджеры. подкасты. удобное-чтение.. aiogram. python. telegram. аудиокниги. книги. Мессенджеры. подкасты. удобное-чтение. Читальный зал.

Я очень люблю аудиокниги. Но в последнее время слушать их легально (и удобно) стало той еще болью. То книга внезапно пропадает из библиотеки сервиса из-за истекших авторских прав, то приложение для прослушивания обрастает ненужными функциями и начинает весить как AAA-игра, то скачанные с торрентов гигабайтные архивы забивают всю память смартфона.

Я перепробовал десяток офлайн-плееров, но везде натыкался на компромиссы: нет синхронизации между устройствами, слетает прогресс, неудобно закидывать файлы. В какой-то момент я посмотрел на Telegram с его безлимитным облаком и подумал: почему бы не сделать из него идеальный плеер?

Так появился StoryTune.

Долгое время этот бот жил в закрытом режиме — как элитная библиотека «только для своих». Мы с друзьями переварили через него терабайты аудио, отловили сотни багов, переписали архитектуру и довели UX до ума. Продукт получился настолько стабильным и ламповым, что держать его взаперти стало просто неправильно.

Сегодня я открываю двери бота для всех желающих и хочу рассказать, какие фичи в него заложены и какие архитектурные грабли (особенно с UI в Telegram) пришлось собрать при разработке на aiogram 3.

Главное меню

Главное меню
Меню книги

Меню книги

Главная идея бота: вы — единственный хозяин своей библиотеки.

Находите любую аудиокнигу в MP3 (старые радиоспектакли, редкие лекции, инди-чтецы, рутрекер), скидываете файлы боту, а он сам сортирует их по алфавиту и собирает в аккуратную карточку книги. Файлы лежат на серверах Дурова, память вашего устройства свободна, а слушать можно с чего угодно — хоть с телефона, хоть с рабочего макбука, хоть с умных часов.

🚀 Главные киллер-фичи (почему не просто «Избранное»)

Многие спросят: «Зачем бот, если можно просто кидать музыку в Избранное?». Отвечаю: Избранное не запоминает, на какой секунде вы остановились в третьей главе из пятидесяти. А мы добавили еще несколько вещей, которых нам критически не хватало.

1. Умные заметки с таймкодами

Слушаете сложный нон-фикшн, и тут звучит гениальная мысль. Куда её записать? В StoryTune вы прямо во время прослушивания жмете «Добавить заметку» и пишете: 14:20 - Очень крутая метафора про архитектуру. Бот сохранит её под текущей главой, а таймкод станет кликабельным. Нажали — и аудио запустилось ровно с нужной секунды.

Как слушать аудиокниги в Telegram без боли: история создания идеального облачного плеера на Python - 3

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, так сказать), есть режим «Скрытых книг». Книга убирается в «Тайную комнату» и исчезает с главного экрана, чтобы обложка какого-нибудь бульварного романа случайно не засветилась, когда вы открываете бота в метро.

Как слушать аудиокниги в Telegram без боли: история создания идеального облачного плеера на Python - 4

4. Inline-шеринг (Магия вне Хогвартса)

Допустим, вы хотите посоветовать аудиокнигу другу. Вам не нужно кидать ему 50 MP3-файлов или заставлять его искать её в боте.

Вы просто открываете диалог с другом, пишете @storytunebot, и над клавиатурой всплывает ваша личная библиотека. Выбираете книгу, и она улетает в чат в виде красивой плашки. Друг жмет кнопку — и вся книга (без вашего личного прогресса) мгновенно копируется к нему на полку.

Как слушать аудиокниги в Telegram без боли: история создания идеального облачного плеера на Python - 5

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

Как слушать аудиокниги в Telegram без боли: история создания идеального облачного плеера на Python - 6

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

Источник

Rambler's Top100