Началось все года два назад, во Вконтакте я напоролся на один бот для знакомств (не буду говорить какой) и подумал, что почему бы не сделать такой же но в Телеграм, благо на тот момент мне хотелось попрактиковаться в написании ботов для телеги ну и на тот момент мне понравилась идея для бота в стиле "Знакомства"
В качестве языка программирования я выбрал Python, и сходу начал "творить"
в ходе разработки за пару месяцев я понял, что не все так просто как казалось:
1 - Bot pulling работал так себе, стабильности было маловато
2 - Библиотека telebot которую я использовал оказалась не так проста как кажется на первый взгляд
3 - Я был удивлен когда понял , что кода там будет больше чем в привычных мне скриптах на 200 строк, пришлось изучать много информации для разработчиков
4 - Инфраструктура, поднятие бота локально на ПК это хорошо, но лучше было бы что бы появился какой-то сервер
Решением проблем было такое:
Переделал бот на web hooks, теперь не мой бот опрашивал Telegram на наличие изменений
а Telegram отправлял сообщения про изменения в мой бот, но для этого пришлось научить мой код принимать то что посылает мне Телеграм, в этом мне помог flask, та же пришлось купить доменное имя (купил подешевле на Go Daddy, там за копейки можно взять доменное имя на год, ну а потом цена будет выше, ибо скидки не на всегда) + Нужен SSL, по этому "перед" ботом появился nginx в роли reverse proxy, и Lets Encrypt сертификат, дешево и сердито. Это все я начал деплоить по всем канонам Continuous Delivery на купленный мной за 5$ самый дешевый сервер (дроплет) на DigitalOcean (кстати там можно на первые 3 мес получить этот дроплет бесплатно, но это не точно) ну а в качестве хранилища кода был выбран GitHub, после того как его выкупили Майки в нем можно бесплатно создавать закрытые репы)
Но это еще не все, ибо во время работы бота нужно хранить информацию, временную и постоянную, для этого пришлось подключить БД, в качестве бд в которой хранится временная информация, был выбран redis, ну а для хранения постоянных данных моя любимая mongodb , в целом их можно было развернуть прям на сервере, но я решил сделать все красиво и купил DigitalOcean Managed базу, то есть они сами ей "управляют" а я только конфигурирую ее кнопочками 😁 но штука не дешевая, 12$ в мес за одну базу.
Но так как я это все делал один, это заняло много времени, так же в Телеграм уже появились боты такого характера и это все привело к потери у моего бота уникальности + баги + пока делал появились библиотеки для работы с API Telegram поддерживающие асинхронность.
По этому хотелось бы дать совет тем кто тоже хочет разработать какой-то свой продукт😁
что бы не напарываться на такие косяки как я, перед разработкой нужно:
1 - Разработать документацию, да, это долго, возможно олдскульно, но это важно!
в ней обязательно должна быть схема работы, и все будущие функциональные возможности продукта (Да, опытные скажут что даже если и так , рано или поздно захочется добавить то чего изначально не было описано, но это будет намного проще чем без нормальных доков, так как вы будете понимать что и зачем идет, почему этот Сlass наследуется от этого Class - а, это позволит модифицировать код не парясь о том что щас все навернется)
2 - Детально изучить актуальные технологии, если вышла 3 версия python, не нужно кодить на 2 ой =)
3 - Желательно автоматизировать обновление версий продукта, так вы потратив может день, с экономите пару месяцев на ручном обновлении и возможных фиксах во время этого в будущем
(в этом поможет terraform для управления инфраструктурой, ansible как система управления конфигурацией, ну и попробуйте контейнерезацию в виде docker - это позволит более удобно управлять версиями)
Многие скажут, да зачем все это? этим же никто не будет пользоваться ?
а если будет?) представьте что у вас привалило 10 к пользователей, а у вас один сервер на 2 ядра в полку еле работает, а код обновляется посредством scp 😁
а так даже если этим и никто не будет пользоваться вы изучите много технологий, и кто знает, может они вам пригодятся в будущих проектах 😁
Собственно вот и бот:
https://t.me/Meets_For_Bot
Функциональных возможностей немного, но хоть что-то но есть:
1 - Лайки/Дизлайки, естественно если лайкнуть кого-то ему придет сообщение что вы его
лайкнули и он сможет посмотреть ваш профиль
2 - Мультиязычность, язык интерфейса бота подстраивается под язык Telegram клиента
3 - Можно отправлять друг другу анонимные сообщения внутри бота, их видите только вы и получатель
4 - Можно получить рандомный профиль ну или просто по очереди перебирать профили
Цель бота изначально была просто попрактиковаться в написании ботов, ну а теперь им даже пользуются люди😁