Привет, Хабр!


По наблюдениям, Телеграм нравится очень многим в первую очередь как удобный транспорт файлов с девайса на девайс. Это, пожалуй, первое приложение, которое обеспечило такой удобный канал без каких-либо существенных ограничений и оговорок. Все ведь согласятся, что "максимальный размер одного файла 1.5Gb" — это нельзя считать существенным ограничением.


И всё прекрасно, но с течением времени файлы накапливаются, их становится много, они "уплывают" в истории куда-то в глубь веков и найти их становится сложно. Решение первого шага — теги! Они спасают, но тоже не могут справиться с проблемой количества — когда накапливается несколько десятков сообщений с тегом "#прочитать" — это не сильно отличается от ситуации без тегов вообще.


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


Мысль напрашивалась сама собой — нужна иерархия, как в любой файловой системе. Директории, поддиректории и в них тоже поддиректории и так далее. И файлы, "лежащие" в этих директориях. Мысль напросилась и была воплощена в виде бота (за Bot API отдельная благодарность авторам мессенджера), которого мы и рассмотрим в этой публикации.


Встречайте: TeleFS Bot. Для друзей TFS.


Что умеет бот


Только самое необходимое:


  • создавать иерархию директорий
  • "складывать" файлы в созданные директории
  • искать по файлам и директориям
  • переименовывать/удалять/переносить элементы этой структуры
  • создавать текстовые метки, которые видны в шапке директории

Как это работает


Всё очень просто: вы добавляете бота к себе в контакты, а потом как в любом файловом менеджере создаёте папочки, кладёте туда файлы, удаляете их и так далее. Только это всё происходит в мессенджере и всё сразу доступно в вашем аккаунте на любых других девайсах. Удобно.


Выглядит это, например, вот так:


Десктоп Телефон

Вы посылаете файлы в телеграм ровно так же, как и до этого, только с возможностью управлять своим каталогом.


Как это устроено


Бот это веб-сервис, который в своей локальной базе данных хранит структуру директорий (отдельно для каждого корреспондента), сами файлы по прежнему находятся в облаке телеграма, бот оперирует только идентификаторами. То есть, запрашивая у бота "что у нас в папке ХХХ", ваш мессенджер на самом деле получает список ссылок и атрибутов к ним, который, благодаря разметке превращается в набор кнопочек, по нажатию на которые вы либо отдаёте команды боту, либо загружаете свои файлы в/из облака телеграм.


Непреодолимые сложности


В процессе реализации идеи были встречены два момента, обойти которые не удалось никоим образом:


Первый: при отсылке медиа-файла в телеграм, именно как файла, безвозвратно теряется имя файла. То есть, получив медиа-файл, бот не имеет ровно никакой возможности получить исходное имя файла. Это боль и печаль. Приходится генерировать исходя из типа. И есть небольшой лайфхак — если к файлу прилагался комментарий, то он станет именем файла.


И второй момент: у кнопок в сообщениях не может быть тултипов и иконок.
Не спешите улыбаться сейчас: немногие представляют, как сложно выстроить интуитивно понятный интерфейс, когда в распоряжении только ограниченный сегмент Unicode и только один вид контролов!


И что же дальше?


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


Бот в телеграм
Бот в исходниках


За рамками этой публикации остаются все технические моменты и инструкции по сборке/инсталляции бота, так как это должно стать второй статьёй про бота, с уклоном в программирование.


Спасибо за внимание.


P.S. Отдельная благодарность авторам статьи на Хабре — их путь интересен :)


Edit #1
группа для предложений/обсуждений: https://t.me/tfsbot_group