В последнее время я сделал настолько много ботов для телеграмма, что крайне преисполнился в том, как их писать, как хостить, да и в принципе выработал красивый шаблон для быстрого их создания.
Сразу могу предложить посмотреть на то, что получиться в конце этого туториала. Для этого я запустил бота с идентичном шаблону кодом.
Также стоит отметить, что хостинг в этом примере бесплатный, но его хватает для разумной нагрузки.
А еще сразу скажу, что далее будет все на питоне... Вот... Сказал. Не буду больше ходить вокруг да около, у нас всего 5 минут (помните, да?). Приступим!
Пошаговая инструкция
1) Создаем репозиторий на гитхабе из моего шаблона
![](https://habrastorage.org/getpro/habr/upload_files/16a/8e6/aae/16a8e6aae018d8487c84d21b9e6f90d0.png)
2) Регистрируемся на Heroku
![](https://habrastorage.org/getpro/habr/upload_files/552/8d7/4e9/5528d74e963cccf4ce0d4b4f2f66a673.png)
3) Создаем новое приложение
![](https://habrastorage.org/getpro/habr/upload_files/734/f80/01d/734f8001d17cbd47a9e2b1bd185cf29e.png)
4) Привязываем наш репозиторий к проекту на Heroku
![](https://habrastorage.org/getpro/habr/upload_files/a06/946/172/a069461722d08c33208b08b843d2332e.png)
5) Настраиваем автоматический deployment
![](https://habrastorage.org/getpro/habr/upload_files/6fd/d1e/520/6fdd1e5201d87c4e99d908a309d10def.png)
6) Смотрим на адрес, где будет висеть наш бот
![](https://habrastorage.org/getpro/habr/upload_files/8cc/167/a4b/8cc167a4bb5a7d96bfd233fb6df8ac1d.png)
7) Настраиваем переменные среды
KEY | VALUE |
BOT_TOKEN | Токен для бота |
WEBHOOK_TOKEN | Рандомная строка из букв для безопастности |
ADMIN_PASSWORD | Еще одна рандомная строка из букв для безопастности |
HOST | Адрес полученный в пункте 6 (например fancy-panda.herokuapp.com). Обратите внимание на формат! |
IS_PRODUCTION | True |
LOG_BOT_TOKEN | Токен для бота, куда будут отправляться логи (оставьте пустым, если хотите отключить логирование в телеграм) |
ADMIN_ID | user_id, куда будут отправляться логи (получить в боте @userinfobot) |
![](https://habrastorage.org/getpro/habr/upload_files/922/d8a/660/922d8a6607885212d8374c49b299fd99.png)
8) Собираем наше приложение и ждем пока оно запустится
![](https://habrastorage.org/getpro/habr/upload_files/cbe/0d3/7bc/cbe0d37bcf8e7a17ca3a99b3d2aa6693.png)
9) Заходим по адресу из пункта 6 и добавляем к ссылке пароль. Получиться что-то такое: fancy-panda.herokuapp.com/?password=<ADMIN_PASSWORD>
![](https://habrastorage.org/getpro/habr/upload_files/62f/414/49b/62f41449b1c557de2900e7c1521d990c.png)
10) Устанавливаем webhook, переходя по ссылке на подобие fancy-panda.herokuapp.com/set_webhook?password=<ADMIN_PASSWORD>
![](https://habrastorage.org/getpro/habr/upload_files/00f/dae/c5d/00fdaec5d49c05a92a44853ff903308e.png)
Тестируем
Теперь, когда мы закончили все настраивать, пора посмотреть, что же мы "натворили".
Посмотреть в живую можно тут.
![Пример работы из коробки Пример работы из коробки](https://habrastorage.org/getpro/habr/upload_files/f6b/6cb/c46/f6b6cbc46be8da6284a670942f331c59.png)
![Пример работы логирования Пример работы логирования](https://habrastorage.org/getpro/habr/upload_files/ee5/918/79d/ee591879d1cd92ceb58f31c0d67519fc.png)
Добавляем функционал
Теперь, когда у вас есть рабочий бот, который сам разворачивается и запускается в облаке, пришло время добавить свои функции. Для примера такую:
@bot.message_handler(commands=["id"])
def get_id(message):
logger.info(f'</code>@{message.from_user.username}<code> used /id')
bot.send_message(message.chat.id, f"user_id = {message.chat.id}")
Думаю, дальше ограничивает вас только воображение... (ну почти)
Применение в проектах
Все любят, когда есть примеры работы. На основе этого шаблона я сделал бота wifi_qr_bot, который генерирует QR-коды для подключения к WiFi. Это упрощает жизнь, ведь пароль у вас длинный (безопасность, все дела), а вводить его на каждом новом устройстве вам лень.
![](https://habrastorage.org/getpro/habr/upload_files/c9d/46d/97e/c9d46d97e2385d72f1fe7923ce4b7f4b.png)
Выводы
Вот мы и сделали нашего бота, который хостится в облаке. Он уже многое умеет в плане логирования. Для логирования я написал отдельную библиотеку, tg-logger. Если интересно, как она работает, то потыкайте в демо бота. Если все еще интересно, прочитайте мою статью. Такие пироги с котятками...
Jourloy
Сколько уже на хабре уроков по созданию однотипных ботов, в том числе и на heroku. Было бы не плохо, если кто-нибудь рассказал о чем-то более трудном, чем просто эхо бот, хотя бы о боте для наложения тех же фильтров на фотографии
otter18 Автор
Я помню, как сам пытался разобраться в этом. И не смог найти урока в интернете, который упростил бы задачу, а не запутал бы и не вызвал бы проблем при попытках запуска. Написал я эту статью, потому что для новичков хотел упростить создания их первого бота. И я не делал опоры на код (по той же самой причине). Я понимаю, что профессионалам это возможно неинтересно.
JPEGEC
Так и ваш пример ничего не объясняет и не помогает разобраться.
aliencash
Ваша задача состоит из 2 частей:
1. функция наложения фильтра на фото (ее вы пишете на любом доступном вам языке)
2. настройка бота.
Так вот задача 2 совсем не представляет никакой проблемы. Основное тут вовсе не бот, а то как реализовать само наложение фильтров.
Т.е. я хочу сказать, что если вы ждете, что вас научат накладывать фильтры (условно), то вам нужно искать такую информацию вовсе не в статье про бота.
Jourloy
Я и сам знаю как накладывать фильтры. Я говорю о том, что если уж и писать статью о ботах, то рассказать не как делать эхо бота, а как делать нечто чуть сложнее, но зато чуть интереснее.
Пусть вместо наложения фильтров будет мини-игра на основе телеграмм бота. Мини-игра в одно сообщение. Рассказать бы как редактировать сообщения, inline кнопки, логика, работа с БД на той же heroku. Это куда интереснее
Disinterpreter
Я люблю создавать ботов для TG, VK, LINE… Больше всего люблю писать обработчики команд, умные (сейчас у меня обработчик команд умеет в роли, права и написан на PL/pgSQL а сам бот написан на Elixir). Да, тут реально есть что рассказать. Но явно не то, как запушить вебхук сервер на хероку.
Автор мог бы больше рассказать про github.com/tdlib/telegram-bot-api как он устроен и в чем преимущество. Или написать бота на чистом tdlib. Это было бы правда интересно и необычно!