- BrainTools - https://www.braintools.ru -

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

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

Я перепробовал десяток офлайн-плееров, но везде натыкался на компромиссы: нет синхронизации между устройствами, слетает прогресс, неудобно закидывать файлы. В какой-то момент я посмотрел на 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] и всегда возвращает вас именно туда, откуда вы пришли.

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) [4]

📖 Подробная инструкция по функционалу [5]

Если вы хотите обсудить фичи, поделиться крутыми книгами или подкинуть идеи для развития — залетайте к нам в Книжный Форум [6] (там мы часто обмениваемся редкими аудиокнигами).

Буду очень рад вашему фидбеку в комментариях! Как вам идея? Чего, по-вашему, еще не хватает в интерфейсе бота для звания идеального аудио-плеера?

Автор: storytune

Источник [7]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/26216

URLs in this post:

[1] болью: http://www.braintools.ru/article/9901

[2] память: http://www.braintools.ru/article/4140

[3] интеллектом: http://www.braintools.ru/article/7605

[4] Бот StoryTune (@storytunebot): https://t.me/storytunebot

[5] Подробная инструкция по функционалу: https://telegra.ph/POLNAYA-INSTRUKCIYA-PO-ISPOLZOVANIYU-BOT-STORYTUNE-AUDIOKNIGI-12-04

[6] Книжный Форум: https://t.me/+ynqkSEPoCG0xNDVi

[7] Источник: https://habr.com/ru/articles/1003714/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1003714

www.BrainTools.ru

Rambler's Top100