Как сделать чтобы Телеграмм бот работал всегда python

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

Часть 1: Создание бота на Python для Telegram

Шаг 1: Регистрация бота в Telegram

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

Шаг 2: Установка необходимых библиотек

Далее необходимо установить библиотеку python-telegram-bot, которая предоставляет удобный интерфейс для взаимодействия с Telegram API. Вы можете установить ее с помощью pip, выполнив команду:

КАК СОЗДАТЬ И ЗАЛИТЬ НА СЕРВЕР ТЕЛЕГРАМ-БОТА НА PYTHON ЗА 15 МИНУТ?


pip install python-telegram-bot

Шаг 3: Написание кода бота

Теперь, когда у вас есть токен доступа и установлены необходимые библиотеки, можно приступить к написанию кода бота на Python. Вот простой пример кода, который реагирует на приветствие пользователя и отправляет ответное сообщение:

from telegram.ext import Updater, MessageHandler, Filters def handle_message(update, context): message = update.message.text if message.lower() == ‘привет’: context.bot.send_message(chat_id=update.effective_chat.id, text=’Привет, как дела?’) updater = Updater(token=’YOUR_TOKEN_HERE’, use_context=True) dispatcher = updater.dispatcher dispatcher.add_handler(MessageHandler(Filters.text, handle_message)) updater.start_polling()

Вышеуказанный код создает экземпляр Updater , который устанавливает соединение с Telegram API с использованием вашего токена доступа. Затем мы создаем обработчик сообщений MessageHandler , который реагирует на текстовые сообщения. В нашем примере он проверяет, содержит ли сообщение текст «привет» и отправляет ответное сообщение.

Часть 2: Упаковка бота в Docker Compose

Шаг 1: Установка Docker и Docker Compose

Прежде чем упаковывать бота в Docker Compose, убедитесь, что у вас установлены Docker и Docker Compose на вашей системе. Вы можете найти инструкции по установке на официальном сайте Docker.

Шаг 2: Создание Dockerfile

Dockerfile — это файл, который содержит инструкции для создания Docker-образа. Создайте файл с именем «Dockerfile» в корневой папке вашего проекта и добавьте следующий код:

FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install —no-cache-dir -r requirements.txt COPY . . CMD python bot.py

Этот Dockerfile использует базовый образ Python 3.9, устанавливает необходимые зависимости, копирует файлы проекта и запускает скрипт bot.py .

Шаг 3: Создание docker-compose.yml

Программируем телеграм бота и деплоим на Heroku!

Теперь создайте файл docker-compose.yml в корневой папке вашего проекта и добавьте следующий код:

version: ‘3’ services: bot: build: . environment: — YOUR_TOKEN=YOUR_TOKEN_HERE

Этот файл определяет службу bot , которая будет построена на основе текущего каталога ( . ). Он также устанавливает переменную окружения YOUR_TOKEN со значением вашего токена доступа.

Шаг 4: Запуск бота в Docker Compose

Теперь вы можете запустить вашего бота в Docker Compose. Откройте терминал, перейдите в папку с файлами проекта и выполните следующую команду:

docker-compose up

Docker Compose автоматически соберет Docker-образ и запустит контейнер с вашим ботом. Вы увидите вывод логов бота в терминале.

Заключение

В этой статье мы рассмотрели, как создать бота на Python для Telegram и упаковать его в Docker Compose. Docker позволяет легко развертывать и масштабировать ботов, обеспечивая удобную изоляцию и управление зависимостями. Docker Compose предоставляет простой способ описания и запуска множества связанных контейнеров. Теперь у вас есть все необходимое для создания и развертывания своего собственного бота на Python для Telegram. Удачи в вашем проекте!

Еще по теме:  Для быстрого перехода в Телеграм бот используйте QR код рез

Источник: infozone.pro

Как сделать чтобы телеграм бот работал постоянно

В Telegram с 24 июня 2015 появились боты, а точнее Telegram Bot API. То есть, теперь мою прошлую задачу получения статуса сервера можно решить гораздо удобнее.

Бот не является “пользовательским аккаунтом”, ему не нужен номер телефона, и самое главное — не нужно ставить клиентское приложение для Telegram на сервере или где вы хотите его использовать. Бот для Telegram — это ну как бы и есть API — веб-запросы к серверам Telegram. Механизм обработки запросов и отправки ответов лежит на вас, как на владельце бота.

Официальная документация по ботам здесь: https://core.telegram.org/bots

Создание бота

Нужно написать самому главному боту — BotFather:

BotFather help

…и уважительно попросить создать нового бота:

BotFather newbot

После этого бот будет создан. Обратите внимание на токен — по нему осуществляется доступ к боту, так что светить этот токен нельзя, иначе кто угодно сможет получить доступ к сообщениям бота (перехватывать запросы и отправлять свои ответы).

Сейчас, когда у вас уже создан бот и получен токен, я могу на примере продемонстрировать, что конкретно имел в виду под словами “это ну как бы и есть API”. Откройте браузер и перейдите по такому адресу:

В браузере отобразится примерно такое:

Для большей наглядности, вот скриншот браузера:

Telegram бот вызов из браузера

Вот что такое бот в Telegram. Вы отправляете веб-запрос и получаете на него JSON-ответ.

Разумеется, нам нужно автоматизировать как отправку запросов, так и разбор JSON-ответов, потому нужна программная реализация бота, которая будет работать на каком-нибудь сервере (можно и на домашнем компе, но тогда, очевидно, бот будет доступен только когда будет включен компьютер). И для этой цели можно выбрать абсолютно любой язык программирования, поддерживающий отправку веб-запросов, ведь, как я уже сказал и продемонстировал — работа с ботом это всего лишь отправка веб-запросов и разбор ответов.

Реализация бота

Я выбрал язык Python. Выбор далеко не случаен. Дело в том, что для Python уже есть готовая библиотека, существенно облегчающая реализацию бота — это pyTelegramBotAPI. Собственно, в ней сделано уже всё, что требуется для отправки веб-запросов и получения ответов, вам остаётся только описать команды, которые ваш бот будет уметь выполнять. Однако, какое-то понимание всё же потребуется, потому настоятельно рекомендую изучить документацию по API: https://core.telegram.org/bots/api

Итак, вам нужно поставить Python и какую-нибудь IDE (хотя, конечно, можно и в Блокноте). Вот что у меня:

Итак, у вас установлен Python и pip, ставим pyTelegramBotAPI:

Теперь создаём файл someTestBot.py , в котором и будет описан функционал бота. Я определил две обязательных команды /start и /help , а также команду отправки статуса сервера /server (забегая вперёд, она предназначена для запуска в Linux, так что при тестировании на Windows её вызов зафейлится):

Скрипт сбора информации о статусе сервера status.sh я взял из прошлой статьи и немного изменил:

Его надо поместить на сервере по пути /root/scrps/status.sh , либо каком другом, но тогда надо не забыть изменить его и в исходниках бота.

На этом реализация бота закончена.

Возвращаемся к BotFather, указываем ему команды, которые знает бот:

BotFather commands

Размещение и запуск бота на сервере

Telegram бот команды

Как я и говорил, команду /server в Windows он обработать не смог, и пойманное исключение записалось в журнал.

Кстати, обратите внимание — приложение показывает подсказки о всех командах бота, которые мы добавили через BotFather:

Telegram бот команды

Теперь задача, как сделать так, чтобы бот работал постоянно. Идём на сервер с Linux, создаём каталог /usr/local/bin/someTestBot/ , кладём в него наш someTestBot.py . Кстати, на сервере тоже должен быть установлен pyTelegramBotAPI (разумеется, Python и pip тоже).

Еще по теме:  Как получить разбан в Телеграмме

Я расскажу о двух способах, как запустить скрипт в качестве сервиса: Supervisor и systemd .

Supervisor

Создаём конфиг для процесса ( /etc/supervisor/conf.d/someTestBot.conf ):

С таким конфигом, надо полагать, бот будет “выполняться” с root правами, что некруто. Скорее всего, можно задать, с какими правами это будет работать. Ну да ладно, нам же надо скорее в продакшн, так что запускаем:

systemd

А можно ничего и не устанавливать, если в системе используется systemd .

В User=someTestBot можно и root указать, но я рекомендовал бы создать под это отдельного юзера. Правда, тогда чтобы работали скрипты, надо будет дать этому пользователю доступ к mysqladmin .

Включаем нашу только что созданную службу:

Ну всё, бот работает, проверяем:

Telegram бот статус сервера

Что ещё можно сделать? Ну, вот эта строка — bot.polling() — в общем-то, означает бесконечно выполняющийся цикл запросов к серверам Telegram, что не очень правильно в плане потребления ресурсов на обеих сторонах. Лучше сделать так, чтобы приложение бота ожидало сообщения от Telegram. Это можно сделать, реализовав webhook. Когда доберусь до этого, дополню статью.

Наконец-то запилил инструкцию на webhook. Решил не добавлять здесь, а запостить новую статью.

Как сделать так, чтобы бот работал постоянно?

Что нужно сделать, чтобы бот работал на постоянке, даже если я выключал бы свой пк/посоветуйте какие нибудь сервисы,если такие знаете.

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

Я воспользовался сервисом https://www.pythonanywhere.com там все бесплатно и понятно. Регистрируешься, затем добавляешь файлы с ботом в раздел Files и после запускаешь.

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Есть ли способ сохранить работоспособность бота Telegram при закрытии Python? [Дубликат]

Я создал очень простой бот Telegram, следуя этот учебник. Поэтому у меня есть файл, содержащий код Python, и когда я запускаю этот код, бот будет повторять то, что я говорю.

Правда ли, что бот будет работать только тогда, когда у меня включен Python и код работает? Означает ли это, что я не могу запустить любой другой script в Python в одно и то же время, и ни один из них не может закрыть Python, если я хочу, чтобы мой бот продолжал работать?

Есть ли способ обойти это, так что бот всегда будет ‘on’?

2 ответа

Бот телеграмм — это программа Python. Когда вы запускаете его, он делает то, что он должен делать, тогда, если вы остановите программу, бот перестанет работать. Проблематика является общей для всех программ, особенно на сервере. Подумайте о Nginx, Apache, ssh и т.д. Все это программы, и все они перестают выполнять свою работу, когда закрываются.

Если вы хотите убедиться, что ваш бот будет работать всегда, вы должны его демонизировать. Существует множество решений.

Вы можете преобразовать ваш script в качестве демона, поэтому при его запуске он переходит непосредственно в фоновый режим и продолжает работать до тех пор, пока сервер не будет отключен (или сбой программы). Но в этом случае ваш бот будет повторно запускаться, если вы (или кто-то еще) перезагрузите компьютер (сервер)? Для этой цели есть несколько библиотек python, таких как daemonize.

Другим распространенным решением является запуск вашего бота в диспетчере процессов. Например, вы можете проверить supervisorctl, или вы можете решить создать script для запуска вашей программы из System V, UpStart или Systemd. Предположим, вы хотите развернуть свой бот на выделенном сервере или VPS. Это будет рассмотрено в части 3 tutoriel, которую вы следовали:

Следующая и последняя часть этой серии [. ] будет демонстрировать, как развернуть Бот для VPS.

Вы также можете рассмотреть возможность инкапсуляции вашего бота в изображение или контейнер (Docker и т.д.), чтобы запустить его на совместимой платформе.

Еще по теме:  Где спрятаны скрытые чаты в Телеграмм

Запускаем телеграм-бота на сервере

Тогда он будет работать круглые сутки, а вы — отдыхать.

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

Вот что мы сделаем, чтобы бот работал независимо от всего:

  1. Выберем сервер.
  2. Подготовим программу для работы на нём.
  3. Зальём программу на сервер.
  4. Настроим сервер, чтобы он исполнял программу.

Выбираем сервер

Нам нужен сервер, который умеет работать с Python и запускать файлы программы автоматически. На самом деле он у нас уже есть — на нём крутится сайт mihailmaximov.ru. Если вы всё пропустили — держите подборку:

Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.

Готовим программу и отправляем её на сервер

Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.

Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:

Этих данных достаточно, чтобы управлять сервером по SSH.

Вставляем их в Putty и подключаемся. Помните, что для безопасности во время ввода пароля курсор стоит на месте, чтобы никто не смог выяснить, сколько символов вы набираете. Когда подключились, вводим команду python3.3 -V — она покажет, есть ли на сервере поддержка этой версии Python:

Сервер говорит, что у него установлена версия Python 3.3.5 — нам этого хватит. Теперь добавляем в самое начало нашего файла с программой такую строчку:

В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .py и отправляем его на сервер в папку cgi-bin (то, что лежит в этой папке, никто не увидит):

Запускаем телеграм-бота на сервере

Настраиваем сервер

Теперь научим сервер понимать, как работать с нашей программой. Для этого в корне сайта находим файл .htaccess и добавляем в него такую строчку:

AddHandler cgi-script .py

Если у вас такого файла нет — создайте его и не забудьте про точку в самом начале названия.

Последнее, что осталось сделать, — настроить права доступа у файла с программой. Находим её среди файлов хостинга и выставляем права 755 или rwxrwxr-x:

Запускаем телеграм-бота на сервере

Теперь с помощью Putty снова подключаемся к серверу и настраиваем рабочее окружение. Это как будто виртуальная песочница, где мы сможем ставить нужные модули для Python, чтобы не мешать остальным пользователям сервера.

В SSH-терминале пишем по очереди такие команды (вместо .thecode можно написать название каталога, которое вам по душе):

virtualenv .thecode source .thecode/bin/activate

Эти две команды создадут виртуальное пространство для запуска Python-файлов.

Теперь установим Python-модуль для работы с Телеграмом:

pip install pytelegrambotapi

Когда установка закончится, пишем такую команду:

nohup python3 /home/t/thecode/osebe/public_html/cgi-bin/telegoroskop.py

/home/t/thecode/osebe/ — это наш путь к папке cgi-bin, а у вас он будет другим. Поменяйте путь на свой и запускайте.

Чтобы программа продолжала работать после того, как мы закроем SSH-клиент, в самом начале пишем команду nohup .

Что дальше

Рейтинг
( Пока оценок нет )
Загрузка ...