Привет, Хабр!
По наблюдениям, Телеграм нравится очень многим в первую очередь как удобный транспорт файлов с девайса на девайс. Это, пожалуй, первое приложение, которое обеспечило такой удобный канал без каких-либо существенных ограничений и оговорок. Все ведь согласятся, что "максимальный размер одного файла 1.5Gb" — это нельзя считать существенным ограничением.
И всё прекрасно, но с течением времени файлы накапливаются, их становится много, они "уплывают" в истории куда-то в глубь веков и найти их становится сложно. Решение первого шага — теги! Они спасают, но тоже не могут справиться с проблемой количества — когда накапливается несколько десятков сообщений с тегом "#прочитать" — это не сильно отличается от ситуации без тегов вообще.
Следующим очевидным ходом становится создание чатов, групп и каналов, с самим собой или с "мёртвыми" контактами, просто для хранения полезного. Но, так как это тоже одноранговая архитектура, то и она приходит к тому же состоянию, что и предыдущие попытки каталогизации.
Немного оживил картину очередной апдейт телеграма с папками. Но ожидания, увы, не оправдались — нам дали возможность заводить корневые папки для сортировки чатов, но не более того.
Мысль напрашивалась сама собой — нужна иерархия, как в любой файловой системе. Директории, поддиректории и в них тоже поддиректории и так далее. И файлы, "лежащие" в этих директориях. Мысль напросилась и была воплощена в виде бота (за Bot API отдельная благодарность авторам мессенджера), которого мы и рассмотрим в этой публикации.
Встречайте: TeleFS Bot. Для друзей TFS.
Что умеет бот
Только самое необходимое:
- создавать иерархию директорий
- "складывать" файлы в созданные директории
- искать по файлам и директориям
- переименовывать/удалять/переносить элементы этой структуры
- создавать текстовые метки, которые видны в шапке директории
Как это работает
Всё очень просто: вы добавляете бота к себе в контакты, а потом как в любом файловом менеджере создаёте папочки, кладёте туда файлы, удаляете их и так далее. Только это всё происходит в мессенджере и всё сразу доступно в вашем аккаунте на любых других девайсах. Удобно.
Выглядит это, например, вот так:
Десктоп | Телефон |
---|---|
Вы посылаете файлы в телеграм ровно так же, как и до этого, только с возможностью управлять своим каталогом.
Как это устроено
Бот это веб-сервис, который в своей локальной базе данных хранит структуру директорий (отдельно для каждого корреспондента), сами файлы по прежнему находятся в облаке телеграма, бот оперирует только идентификаторами. То есть, запрашивая у бота "что у нас в папке ХХХ", ваш мессенджер на самом деле получает список ссылок и атрибутов к ним, который, благодаря разметке превращается в набор кнопочек, по нажатию на которые вы либо отдаёте команды боту, либо загружаете свои файлы в/из облака телеграм.
Непреодолимые сложности
В процессе реализации идеи были встречены два момента, обойти которые не удалось никоим образом:
Первый: при отсылке медиа-файла в телеграм, именно как файла, безвозвратно теряется имя файла. То есть, получив медиа-файл, бот не имеет ровно никакой возможности получить исходное имя файла. Это боль и печаль. Приходится генерировать исходя из типа. И есть небольшой лайфхак — если к файлу прилагался комментарий, то он станет именем файла.
И второй момент: у кнопок в сообщениях не может быть тултипов и иконок.
Не спешите улыбаться сейчас: немногие представляют, как сложно выстроить интуитивно понятный интерфейс, когда в распоряжении только ограниченный сегмент Unicode и только один вид контролов!
И что же дальше?
А дальше вы можете попробовать пользоваться ботом, конечно же.
Самый лучший вариант — это установить его для себя на своём сервере и пользоваться так, как душе угодно.
Бот в телеграм
Бот в исходниках
За рамками этой публикации остаются все технические моменты и инструкции по сборке/инсталляции бота, так как это должно стать второй статьёй про бота, с уклоном в программирование.
Спасибо за внимание.
P.S. Отдельная благодарность авторам статьи на Хабре — их путь интересен :)
Edit #1
группа для предложений/обсуждений: https://t.me/tfsbot_group
Edit #2
Продолжение