[Из песочницы] Telegram как NAS/FTP

qiq9obfz-1v8vhxr7q0dakb1ddy.png

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

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

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

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

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

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


Что умеет бот

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


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


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

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

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

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


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

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


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

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

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

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


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

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

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

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

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

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

© Habrahabr.ru