Технологии в деталях
September 6, 2024

Где разместить телеграм-бота (и другие скрипты на Python) 

Многие разработчики сталкиваются с вопросом: как разместить свои Python-скрипты, Flask-приложения или ботов для Telegram и Discord?Традиционно для этого использовался домашний компьютер с внешним IP-адресом, что требовало навыков настройки портов на маршрутизаторе. Альтернативой были платные хостинг-сервисы.В этой статье мы рассмотрим пошаговую инструкцию по бесплатному круглосуточному хостингу Python-скриптов на примере Telegram-бота.

Если не хотите возиться то просто создавайте вот тут простой сервер за 60 рублей в месяц. Это надежно и проще

Подготовка

Первым шагом является регистрация бота в Telegram. Этот процесс хорошо описан во многих руководствах, поэтому мы лишь кратко обозначим основные моменты:

  1. Найдите BotFather в Telegram
  2. Создайте нового бота
  3. Выберите имя для бота
  4. Получите токен (например: 127466748171:HJfwijfw88jf32lc9FHjwpfkfgwerhjf)

Сохраните полученный токен - он понадобится нам в дальнейшем.

Шаг 1 - регистрируемся на https://replit.com/

Создаем новый проект на Python

Шаг 2 - Пишем код бота

В проекте будет создан файл main.py. В нем размещаем код бота:

Тут стоит обратить на установку модуля pytelegrambotapi: импортируем сначала pip и потом выполняем его через: pip.main(['install', 'pytelegrambotapi']).

В этом случае при запуске никаких дополнительных действий для установки не потребуется

import osfrom background import keep_alive #импорт функции для поддержки работоспособностиimport pippip.main(['install', 'pytelegrambotapi'])import telebotimport timebot = telebot.TeleBot('СЮДА ВСТАВЬТЕ ВАШ ТОКЕН')@bot.message_handler(content_types=['text'])def get_text_message(message):  bot.send_message(message.from_user.id,message.text)# echo-функция, которая отвечает на любое текстовое сообщение таким же текстом   keep_alive()#запускаем flask-сервер в отдельном потоке. Подробнее ниже...bot.polling(non_stop=True, interval=0) #запуск бота

Шаг 3 - Создаем Flask-сервер

Создаем в проекте еще один файл background.py В нем будет запущен Flask-сервер, который будет принимать запросы от сервиса мониторинга и использоваться для поддержания работоспособности скрипта на ReplIt.

Flask - модуль на python для разработки веб-приложений. Мы создадим "шаблон" сервера, в котором только одна страница, необходимая для нашей задачи.

Все дело в том, что в бесплатном режиме запущенный скрипт на Replit будет остановлен спустя некоторое время (10-30 мин) после закрытия вкладки браузера.
Однако, если к веб-серверу был сделан запрос, таймер сбрасывается и скрипт продолжает работать.

from flask import Flaskfrom flask import requestfrom threading import Threadimport timeimport requestsapp = Flask('')@app.route('/')def home():  return "I'm alive"def run():  app.run(host='0.0.0.0', port=80)def keep_alive():  t = Thread(target=run)  t.start()

Важно, что сервер запускается в файле не напрямую, а в отдельном потоке t = Thread(target=run). Это обеспечит возможность одновременной работы Flask-сервера и телеграм-бота.

Запуск Flask-сервера

После запуска в верхнем правом углу появилась ссылка (она потребуется чуть позже) по которой можно увидеть результат работы Flask-сервера (в нашем случае сообщение I'm alive).

На этом этапе у нас работает эхо-телеграм-бот и веб-сервер, доступный из вне по адресу вида: YOUR_REPL.your_nickname.repl.coОднако, спустя 10-30 минут после закрытия вкладки браузера скрипт будет остановлен. Вся хитрость в том, что если "кто-то" будет периодически открывать ссылку, ведущую на страницу нашего веб сервера скрипты будут продолжать работать бесконечно долго.

Шаг 4 - настраиваем службу мониторинга

Для того, чтобы скрипт работал постоянно, воспользуемся сервисом UpTimerRobot. Он будет раз в 5 минут создавать запрос к нашему web-серверу и продлевать время его работы. Регистрация не представляет трудности, поэтому перейдем к следующему этапу.

После входа в личный кабинет, создаем новый монитор

Создание монитора в UpTimerRobot

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

Сохраняем монитор и возвращаемся в ReplIt. В консоле сервера видим входящие обращения от службы мониторинга

Это значит, что все получилось и наш скрипт будет работать 24/7. Можно работать над ним и развивать проект!

Успехов!

Теги: