Shortcut Holder — Telegram-бот для отправки часто пересылаемых сообщений

TL;DR: я запилил Telegram-бота, который позволяет удобно отправлять часто пересылаемую информацию вроде прайс-листа, каких-нибудь инструкций или реквизитов всего в пару кликов, вот он: @shortcut_robot.

После переезда в Армению столкнулся с частой проблемой: деньги мне не могут перевести по номеру телефона, как это было привычно делать раньше через Систему Быстрых Платежей в России, а новым гостям требуется инструкция по тому, как добраться до моей квартиры на седьмом этаже пятиэтажки в подъезд без номера, вход в который осуществляется с другой улицы. Для первого приходилось по ключевым словам искать в переписке в Telegram номер карты, а для второго лезть в запиненные в переписке с женой сообщения и пересылать фото с инструкцией. Так вышло, что я из тех людей, которые вместо минуты ручной работы предпочтут час автоматизировать, так родился Telegram-бот Shortcut Holder.

Началось с того, что в чатике кампании по Dungeons & Dragons ребята часто писали что-то типа: «Блин блинский, до сессии осталось 3 дня 6 часов 25 минут», и я в качестве шутки написал бота, который по inline-команде присылает в чат сообщение формата «блин блинский до сессии %D дней, %H часов, %M минут, %S секунд». Работает это так: в любом чате можно написать в сообщении название бота, добавить пробел, после этого выскакивает список доступных команд, затем нужно ткнуть в нужную, после чего бот моментально присылает в чат результат. В списке команд — ссылка на Zoom для игроков из других локаций, а также ссылка на GitHub с кодом бота для тех игроков, кто хочет расширить функционал бота.

Несмотря на то, что ссылка на Zoom запинена в чате, игроки всё равно перед каждой сессией вызывают её ботом в чат, чтобы зайти. Ну и, конечно, каждую неделю минимум несколько раз в чат inline-командой прилетает сообщение «блин блинский...»
Несмотря на то, что ссылка на Zoom запинена в чате, игроки всё равно перед каждой сессией вызывают её ботом в чат, чтобы зайти. Ну и, конечно, каждую неделю минимум несколько раз в чат inline-командой прилетает сообщение «блин блинский...»

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

Итого я:

  • поднял виртуалку на Ubuntu в Яндекс.Облаке (потому что есть ежемесячный грант на достаточную сумму);
  • там же развернул Managed Service PostgreSQL (можно было и обойтись, например, SQLite, но я не хотел париться со всякими типами и файловым хранением, поставил сразу нормальную базу на случай, если бот станет популярным);
  • код бота написал на Python, потому что ни на чём другом не умею писать ничего адекватного;
  • для манипуляциями с Telegram Bot API использовал PyTelegramBotAPI как относительный стандарт;
  • для удобства тестинга и манипуляций с файлами, кодом и БД поднял на сервере JupyterLab и pgAdmin4.

Никнейм бота — @shortcut_robot. Примерно за рабочий день удалось собрать минимальный, но стабильно работающий функционал:

  • /add — добавить новый шорткат (поддерживаются фото, видео, GIF, аудио и локации; каждому шорткату нужно выдать уникальное имя);
  • /list — получить список всех шорткатов (в чат присылаются все шорткаты в полном виде);
  • /delete — удалить шорткат (сперва выбрать его по имени);
  • отправка сохранённых шорткатов в чат inline-командой с поддержкой поиска по названию (если после названия бота начать писать текст, то в списке найденных шорткатов будут отображаться только те, в названии которых содержится введённый текст).
В первы раз нужно ввести название бота полностью, но после одного использования бот появляется в списке предложенного по нажатию на @, и отправка шортката сокращается до простого алгоритма: ввёл @, выбрал из списка Shortcut Holder, выбрал нужный шорткат.

Во время разработки встал вопрос о визуальном оформлении бота, я решил попробовать сгенерировать что-нибудь с помощью ChatGPT и после нескольких итераций получил примерно то, что себе представлял.

Мне кажется, что стопка карточек на смартфоне слишком громоздкая, но никакими уговорами у меня не получилось заставить ChatGPT уменьшить её, но мне и так нравится.
Мне кажется, что стопка карточек на смартфоне слишком громоздкая, но никакими уговорами у меня не получилось заставить ChatGPT уменьшить её, но мне и так нравится.

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

  • разметки (ссылки, моноширинный шрифт и т.д.) — сейчас бот игнорирует любую разметку, к сожалению, потому что переиспользование сущности MessageEntity как-то коряво работает;
  • хэштеги — более удобный поиск по шорткатам для тех, кто хранит много шорткатов;
  • поддержка более 10 шорткатов (сейчас Telegram выдаёт ограниченный набор в inline-ответе);
  • поддержка скриптов на Python / JS — для того, чтобы можно было в inline-режиме проводить какие-то расчёты или делать запросы, например, получать курс определённой валюты или получать график какой-нибудь метрики.

Буду рад обратной связи в комментариях. Особенно буду благодарен, если кто-то предложит неочевидный способ распространения бота. Пока из намеченного — люди, которые оказывают различные услуги и часто делятся, например, своим прайсом, портфолио или реквизитами. Есть вариант пытаться продвигать это как Telegram-аналог linktr.ee.

22
1 комментарий

Пользуюсь каждый день. Спасибо боженьке за мужа-айтишника😁

3