MegaPort - телеграм бот из нескольких приложений

MegaPort - телеграм бот из нескольких приложений

В этой статье я опишу как появился мой новый проект megaport.biz, структуру бота и входящие в него приложения.

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

Структура бота

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

Например ели вы остановитесь в каком-то меню в боте @megaport_bot, а затем перейдете в бота @megaport1_bot и выполните команду /start, то вы продолжите работу там с того же самого меню. Естественно можно вернуться обратно, «рестартануть» и продолжить работу в первом боте. Сразу говорю, что номера 2 и выше хоть и зарезервированы, но сейчас на них не запущены боты.

Идея объединить несколько приложений в одном боте появилась после того, как я понял , что такая структура движка бота позволяет легко добавлять и убирать приложения в боте. Сейчас приложения объединены в одного бота чтобы упростить работу и поддержку данного проекта на начальном этапе. Любое из этих приложений при необходимости можно запустить как отдельного бота, но пока они будут продвигаться вместе.

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

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

Приложения бота.

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

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

MegaPort - телеграм бот из нескольких приложений

Подробная инструкция как пользоваться ботом в целом и для каждого приложения есть в главном меню бота и в главном меню каждого приложения. Все инструкции размещены на платформе telegra.ph и поэтому доступны для просмотра прямо в приложении Телеграм на телефоне.

Почтовый клиент

Мне всегда хотелось иметь на телефоне что-то очень минималистичное и простое для уведомления о входящих email, их быстрого просмотра и ответа, чем отдельное приложение вроде Gmail от Гугла и тому подобное. И первое, что я сделал - поискал готового телеграм бота. Кроме Gmail я ничего стоящего внимания не нашел, но он мне не понравился. Кроме фатального недостатка 🙂 там не было возможности работать не только с Гуглом, но и с другими почтовиками и не доставало еще кое-каких функций. Пришлось все делать самому.

На данный момент приложение поддерживает только IMAP протокол, его поддерживает подавляющее число почтовых сервисов. В IMAP ваши письма не перемещаются в БД бота и всегда остаются на вашем почтовом сервере. Это удобно исходя из двух соображений: первое - на них не тратятся ресурсы БД бота, второе - обеспечивается некоторая дополнительная приватность.

Хотя читатель вполне резонно может возразить - о какой приватности может идти речь если боту надо сообщить пароль от почты? На что я могу вас клятвенно заверить, что мне чужая почта не интересна. Но как известно, верить можно только веселому Мюллеру 🙂, поэтому вы сами решайте какую информацию кому можно доверять. Добавлю лишь, что на самом деле не может быть никакой по настоящему приватной email почты, если вы и тот, с кем вы переписываетесь, не шифруете и не подписываете свои письма перед отправкой каким-нибудь серьезным алгоритмом вроде PGP.

Думаю, что для начала можно зарегистрировать дополнительный почтовый ящик на том же Gmail или где вам будет удобно, главное чтобы поддерживался IMAP протокол. Если использовать этот email адрес для не очень интимной переписки и уведомлений, то он вполне подойдет для тестирования и дальнейшего использования в этом боте. Возможно с течением времени у бота получится добиться вашего доверия.

Хотелось бы в комментариях узнать, стоит ли мне запустить свой почтовый сервис на домене megaport.biz, чтобы выдавать пользователям бота email адреса в этом домене как альтернативу подключения к внешним почтовикам. Там и пароль вводить не нужно было бы, т.к. email адрес был бы привязан к пользовательскому ID в Телеграме. Я пока не сделал этого, т.к. не уверен что предложенный в боте вариант работы с почтой вам вообще понравится.

Псевдо-веб-браузер

Это приложение я задумывал, как возможность прямо в Телеграме посмотреть веб-сайт, который почему-то 🙂 не открывается в моем обычном браузере. Изначально планировалось сделать мини-приложение, которое будет скачивать и показывать исходную страницу. Затем оно будет отслеживать любые клики по линкам и JS переходы на этой странице, перехватывать их, скачивать и показывать новую страницу и т.д.

Но реализовать это в полной мере не получилось, т.к. современные страницы загажены таким обилием вызовов JS во всевозможных современных фреймворках, что нормальных переходов по обычным линкам почти не осталось. Да и верстка многих страниц при попытке разместить на них мой JS код - расползается до неприличия. Поэтому я, кроме Web App, сделал возможным еще и загрузить скриншоты или PDF страницы, чтобы хоть как-то можно было посмотреть её содержимое.

Приложение пытается обойти некоторые защиты страниц типа Cloudflare, но это не всегда получается. На данный момент это приложение скорее эксперимент, чем что-то практическое. Но возможно читатели предложат в комментариях свои идеи, как это приложение можно использовать на практике или улучшить.

Знакомство по любимым кинофильмам

Это переработанный под новый движок и улучшенный вариант бота, о котором я уже писал на VC. На данный момент тот прежний бот остановлен и весь его функционал с улучшениями перенесен в это приложение.

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

Затем по каждому контакту вы принимаете решение подходит он вам или нет. Для этого вы можете посмотреть профиль контакта и если он её создал, то дополнительно ещё и страницу его профиля на telegra.ph. Если контакт вам подходит - вы одобряете его, если он в ответ одобрит вас, то бот даст вам возможность списаться или поговорить друг с другом в обычном чате Телеграма для пользователей.

Дальше вы общаетесь уже без бота. Это краткое описание, на самом деле там всё немного сложнее, но в инструкции к этому приложению вы найдете все подробности.

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

22
Начать дискуссию