При использовании телеграмм-бота на сервере, работающим под linux перезапустить упавший скрипт Python, в случае использования bot.polling, можно при помощи systemd или supervisor.
Разберем случай с менеджером системных и служб systemd.
Systemd представляет собой программный комплекс, который содержит набор системных компонентов для операционных систем Linux. Его основная цель — унифицировать конфигурацию и поведение служб в дистрибутивах Linux. Основным компонентом systemd является «менеджер систем и служб» — система инициализации, используемая для загрузки пользовательского пространства и управления пользовательскими процессами.
Проще говоря, системный менеджер systemd запустит любой скрипт (в том числе и скрипт Python телеграмм-бота) при старте системы, и будет перезапускать его в случае падения.
Установим системный менеджер systemd, если отсутствует:
$ apt-get install systemd
Создадим файл bot.service в директории /etc/systemd/system с таким содержанием:
$ sudo touch /etc/systemd/system/bot.service
Теперь откроем его
$ sudo nano /etc/systemd/system/bot.service
и вставим следующее содержимое:
[Unit] Description=Telegram bot %name% After=syslog.target After=network.target [Service] Type=simple User=root # замените на свой путь к каталогу, где находится `bot.py` WorkingDirectory=/usr/local/bin/bot # или другой путь # замените на свой путь к телеграмм-боту `bot.py` ExecStart=/usr/bin/python3 /usr/local/bin/bot/bot.py RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
в консоли выполним:
# перечитываем конфигурацию # (обнаружит файл `bot.service`) $ sudo systemctl daemon-reload # подключаем демон `bot.service` $ sudo systemctl enable bot # запускаем демон `bot.service` $ sudo systemctl start bot # смотрим статус демона `bot.service` $ sudo systemctl status bot
ГОТОВО!
Теперь перезапустить/остановить телеграмм-бота можно системными командами Linux:
# перезапуск $ sudo systemctl restart bot # остановка $ sudo systemctl stop bot # запуск после остановки $ sudo systemctl start bot
Возможно ли сделать автоматический перезапуск скрипта с ботом в случае ошибки в коде?
telebot.apihelper.ApiException: A request to the Telegram API was unsuccessful. The server returned HTTP 409 Conflict. Response body:
[b'{"ok":false,"error_code":409,"description":"Conflict: terminated by other getUpdates request; make sure that only one bot instance is running"}']
Пытался использовать следующий код, но так и не понял как он работает. Можете примерно объяснить?
while True:
try:
bot.polling(none_stop=True)
except Exception as e:
logger.error(e) # или просто print(e) если у вас логгера нет,
# или import traceback; traceback.print_exc() для печати полной инфы
time.sleep(15)
1
systemd – cистемный менеджер, демон инициализации других демонов в Linux.
Проще говоря, systemd запустит бота и будет перезапускать его в случае падения.
Установим systemd, если отсутствует:
apt-get install systemd
Создадим файл bot.service с таким содержанием в /etc/systemd/system:
[Unit]
Description=Telegram bot %name%
After=syslog.target
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/bin/bot # or other path
ExecStart=/usr/bin/python3 /usr/local/bin/bot/bot.py # or other path
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
в консоли выполним:
systemctl daemon-reload
systemctl enable bot
systemctl start bot
systemctl status bot
ответ дан 23 апр 2020 в 6:11
![]()
VioletViolet
9,8155 золотых знаков20 серебряных знаков64 бронзовых знака
Однажды мы сделали цикл статей про телеграм-ботов:
- Как сделать телеграм-бота без программирования
- Телеграм-бот на Python
- Запускаем телеграм-бота на сервере
В итоге мы остановились на том, что научились запускать скрипт на сервере, чтобы он работал после разрыва соединения. Но это половинчатое решение: если мы перезапустим сервер, то бот остановится. Иногда сервер перезагружается сам на стороне провайдера, например при плановых технических работах. И тогда наши скрипты умирают.
Сейчас нам нужно такое решение, чтобы бот автоматически перезапускался при любых обстоятельствах. Этим и займёмся.
Коротко — суть
Чтобы было понятно, что тут происходит, вот короткая версия:
- Настраиваем удалённый доступ к серверу.
- Создаём папку и заливаем в неё скрипт, который в итоге должен будет работать всё время.
- Создаём у себя на компьютере файл службы — он управляет настройками автозапуска скрипта.
- Отправляем файл службы на сервер.
- Обновляем на сервере данные обо всех службах и запускаем нашу.
Теперь подробно про каждый шаг.
Предварительная работа
Основное, что мы будем использовать, — это удалённый доступ к серверу по SSH. Для этого он должен быть включён на самом сервере, и там же можно сразу посмотреть параметры доступа. Например, для работы нашего учебного сервера мы пользуемся услугами SpaceWeb, где доступ по SSH включается из панели управления:

Запускаем SSH и проверяем, что соединение устанавливается. Чтобы соединиться, нужно написать в терминале команду ssh имя_пользователя@адрес_сервера, после чего нажать Enter. Сервер спросит пароль, и, если мы его правильно ввели, нас пустят.

Мы видим приветствие сервера, значит, всё прошло хорошо и мы можем управлять им со своего компьютера. Для этого нужно будет писать в терминал команды и реагировать на то, что тебе ответит сервер.
Отправляем скрипт на сервер
Чтобы не захламлять корневую папку на сервере, создадим новую папку bot. Вот эта команда:
mkdir bot
После этого открываем новую командную строку на компьютере, а не на сервере. Для этого нужно запустить ещё одно окно терминала. Там пишем такое:
scp /Users/mihailpolanin/Downloads/bot.py mpolyanin@77.222.61.9:bot
Вот что это означает:
- scp — копирование файла по SSH;
- /Users/mihailpolanin/Downloads/bot.py — это путь к нашему скрипту на компьютере. Его замените на то, что будет у вас;
- mpolyanin@77.222.61.9 — адрес сервера и логин пользователя. Это тоже замените на ваши данные;
- : — отделяет сервер от папки;
- bot — название папки, которую мы только что создали на сервере.
Лайфхак: чтобы не писать вручную пути до файлов на локальном компьютере, можно перед началом ввода пути просто перетащить файл в окно терминала. Терминал поймёт, что вы имели в виду «путь до этого файла», и подставит данные сам.
После запуска у нас попросят пароль от сервера — вводим его и видим статистику отправки файла:

Переключаемся обратно в SSH-соединение и проверяем, что файл скопировался и лежит в папке. Для этого вводим две команды: первая перейдёт в эту папку, а вторая покажет её содержимое:
cd bot
ls

Готовим файл для работы службы
Нам нужно, чтобы система сама следила за тем, чтобы скрипт работал всё время и запускался после перезагрузки. В Linux за это отвечают службы — одну из таких служб мы сейчас и сделаем.
Создаём на компьютере новый файл bot.service и вставляем туда такое:
[Unit]
Description=tg-bot
After=multi-user.target
[Service]
User=root
Group=root
Type=simple
Restart=always
ExecStart=/usr/bin/python3 /bot/bot.py
[Install]
WantedBy=multi-user.target
Два самых важных параметра — это путь к нашему скрипту (/bot/bot.py) и название службы: tg-bot. Название может быть любым, а вот путь к скрипту нужно указать точно.
Теперь закидываем этот файл на сервер в папку /usr/lib/systemd/system. Для этого в командной строке компьютера пишем:
scp /Users/mihailpolanin/Downloads/bot.service mpolyanin@77.222.61.9:/usr/lib/systemd/system
Как и раньше, не забудьте заменить адрес до файла .service на вашем компьютере, а также имя пользователя и адрес сервера. Первый адрес можно не писать вручную, а перетащить файл в терминал сразу после набора команды scp.
Запуск службы
Теперь нам нужно перезагрузить все службы, чтобы наш файл тоже попал в общий список для запуска. Открываем SSH-консоль и выполняем там такую команду:
sudo systemctl daemon-reload
И сразу включим наш сервис, чтобы он не отключался при перезагрузке сервера:
sudo systemctl enable bot.service
Всё, можно запускать наш телеграм-бот как службу. Вот основные команды для этого:
- sudo systemctl start bot.service — запустить службу;
- sudo systemctl enable bot.service — остановить службу;
- sudo systemctl enable bot.service — посмотреть статус, работает или нет.
Что дальше
В следующий раз сделаем ещё круче — настроим систему мониторинга на сервере, чтобы нам на почту приходило сообщение, когда служба перезапускается или останавливается с ошибкой. Подпишитесь, чтобы не пропустить.
Вёрстка:
Кирилл Климентьев
|
0 / 0 / 0 Регистрация: 24.09.2020 Сообщений: 1 |
|
|
1 |
|
|
Telegram Bot 24.09.2020, 20:46. Показов 15277. Ответов 8
Добрый вечер. Столкнулся с такой проблемой: есть телеграм бот на python, размешен на своем сервере, у которого периодически на несколько минут отваливается интернет и бот соответственно крашится. Подскажите на примере как надо правильно прописать чтобы бот сам подключался при появлении интернета и не крашился при его отключении. Про размещении на сторонних серверах речь не идет. Спасибо большое
__________________
0 |
|
290 / 130 / 58 Регистрация: 24.11.2019 Сообщений: 532 |
|
|
25.09.2020, 22:23 |
2 |
|
Роман2323, первый способ который приходит в голову. Сделать соответствующий батник.
0 |
|
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
|
25.09.2020, 23:13 |
3 |
|
первый способ который приходит в голову. …Правильно написать код бота. С соответствующими проверками ошибок и логикой их обработки.
0 |
|
Zanzara75 0 / 0 / 0 Регистрация: 14.03.2018 Сообщений: 4 |
||||
|
20.10.2020, 12:49 |
4 |
|||
ну логгирование — по желанию ))
0 |
|
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
|
20.10.2020, 13:30 |
5 |
|
Zanzara75,
0 |
|
0 / 0 / 0 Регистрация: 14.03.2018 Сообщений: 4 |
|
|
20.10.2020, 14:43 |
6 |
|
ну спорить не буду… ну и надо сказать, что поллинг на aiogram при пропадании инета не крашится вусмерть, а отлично продолжает работать после появления… ну а для телебота — бот ругается после выключения сетевой карты, а потом продолжает работать, как ни в чем не бывало
0 |
|
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
|
20.10.2020, 17:54 |
7 |
|
только — у меня это работает на telebot’е краш происходит при попытке отправить сообщение, когда бот проработал несколько часов. Сервер telegram время от времени закрывает свой конец подключения и telebot не умеет это обрабатывать.
0 |
|
0 / 0 / 0 Регистрация: 09.11.2020 Сообщений: 1 |
|
|
11.11.2020, 19:21 |
8 |
|
на telebot’е краш происходит при попытке отправить сообщение, когда бот проработал несколько часов. Сервер telegram время от времени закрывает свой конец подключения и telebot не умеет это обрабатывать. Укажите, пожалуйста, куда копать, чтобы ловить эти исключения
0 |
|
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
|
12.11.2020, 19:39 |
9 |
|
куда копать, Открыть исходники telebot и понять как это все работает.
0 |
Вы можете запустить на сервере бот, написанный на Python или любом другом языке программирования. Чтобы обеспечить постоянную и надежную работу скрипта, потребуется настроить автозапуск и перезагрузку.
Подготовка
Загрузите файлы бота, например, в директорию /home/me и создадайте виртуальное окружение:
python3 -m venv venv
Активируйте его:
source ./venv/bin/activate
Далее установите все пакеты:
pip install -r requirements.txt
Если файл requirements.txt со списком пакетов отсутствует, установите все расширения вручную.
Screen — самый простой метод
Для простого запуска скрипта в фоне можно воспользоваться утилитой screen, которая позволяет создавать неограниченое количество сессий в терминале.
Ее необходимо установить из репозитория:
sudo apt install screen
Запустите новое окно командой:
screen
Активируйте виртуальное окружение и запустите бота:
source ./venv/bin/activate
python main.py
Осталось свернуть сессию. Для этого необходимо зажать сочетание клавиш Ctrl + A, после чего нажать D.
Список основных команд:
screen— запуск новой сессии;screen -ls— просмотр всех сессий;screen -r <socket_name>— открыть конкретную сессию (если сессия всего одна, то имя можно не указывать).
В сессии:
- Ctrl + A + D — свернуть сессию;
- Ctrl + A + K — завершить сессию.
Это простой метод, который не требует создания конфигурационных файлов. Однако если сервер будет перезагружен или во время работы скрипта возникнет ошибка, бот будет нужно запустить заново.
Systemd
Рассмотрим запуск приложения в роли службы. Systemd — это менеджер системы и служб Linux. Он управляет службами, которые описаны в конфигурационных файлах, и запускает их.
Создайте новый юнит systemd:
sudo nano /lib/systemd/system/bot.service
Добавьте в него следующее содержимое:
[Unit]
Description=Timeweb Bot Service
After=network.target[Service]
Type=idle
Restart=always
RestartSec=3
User=root
WorkingDirectory=home/me/bot
ExecStart=/home/me/bot/venv/bin/python /home/me/bot/main.py[Install]
WantedBy=multi-user.target
где:
- Description — название службы,
- ExecStart — путь до интерпретатора Python и скрипта,
- User — пользователь, от которого будет запущена служба,
- Restart=always — указание, что необходимо перезапустить бота после ошибки.
Осталось перезагрузить юниты, добавить службу в автозапуск и активировать бота:
sudo systemctl daemon-reload
sudo systemctl enable bot.service
sudo systemctl start bot.service
Теперь проверьте работу бота. Если бот не отвечает, попробуйте запустить его в терминале и посмотреть, нет ли ошибок
PM2
Еще один способ запустить бота — использовать менеджер процессов PM2. О нем мы подробнее писали в Community. PM2 автоматически перезапускает бота и сохраняет логи.
Установите следующие пакеты:
sudo apt install nodejs
sudo apt install npm
Далее установите PM2:
npm install pm2 -g
Для запуска бота перейдите в директорию с ботом и запустите его командой:
pm2 start main.py --interpreter=python3
В предыдущей статье мы рассказали, как создать простого бота на Node.js, однако он работал только на локальном компьютере. Эта статья о том, как загрузить бота на сервер, запустить его и проверить, что всё работает.
Шаг 1. Выбрать хостинг
Как правило, на shared-хостинге отсутствует поддержка Node.js, поэтому нам понадобится как минимум виртуальный сервер. Существуют сервисы, предлагающие VPS бесплатно, но с заметными ограничениями: например на количество трафика или нагрузку на сервер. Можно выделить несколько известных зарубежных провайдеров (но стоит отметить, что для новичков они могут оказаться сложными):
- Google Cloud
- Oracle Cloud
- Amazon Web Services
Преимущество платных VPS в более высоких лимитах или их отсутствии, а также в гарантии стабильной работы сервера. Вместе с этим вы получаете активную поддержку и всегда можете рассчитывать на помощь хостинг-провайдера, если возникнут проблемы.
Для примера мы закажем облачный VPS в REG.RU, вы можете воспользоваться любым VPS-хостингом. Он удобен для тестового проекта тем, что оплата почасовая. При выборе тарифа мы рекомендуем ориентироваться на несколько параметров:
- Прогнозируемая нагрузка — зависит от сложности вашего бота и количества запросов к нему.
- Количество оперативной памяти — это зависит от многих факторов, как, например, уровень оптимизации кода и общий масштаб вашего проекта.
Так как наш бот использует только одну основную библиотеку и состоит из нескольких строк кода, мы выбираем самый младший тариф — Cloud-0. В будущем, если возникнет необходимость, можно перейти на более дорогой тариф.
Шаг 2. Заказать хостинг
Переходим по ссылке: https://www.reg.ru/vps/cloud/, выбираем тариф, операционную систему и шаблон «Чистая ОС». Если у вас нет особых предпочтений, рекомендуем выбрать Ubuntu 18.04. Хотя у REG.RU есть шаблон c Node.js, для чистоты эксперимента всё необходимое ПО мы установим сами. Нажимаем кнопку «Заказать»:

После заказа и оплаты дождёмся настройки сервера:

В течение минуты статус сервера сменится с «В процессе» на «Активен». После этого отобразятся реквизиты доступа к серверу, они также будут отправлены на почту:

Шаг 3. Загрузить бота
Приступим к загрузке бота на сервер. Это можно сделать разными способами — с помощью FTP, SFTP, панели управления или, к примеру, rsync. Мы выберем самый быстрый вариант — SFTP, так как для него нужна только возможность подключения к серверу по SSH, которая обычно присутствует на всех VPS сразу после заказа.
Мы подключимся к серверу с помощью FileZilla. Укажем IP-адрес сервера, а также логин root и пароль в настройках клиента:

При первом подключении появится окно с предупреждением:

Ставим галочку «Всегда доверять этому хосту» и нажимаем «Ок».
Переходим на директорию выше (...), затем в каталог /opt и создаём папку с произвольным названием (мы выбрали keksbot):

Переходим в созданную папку и загружаем файлы index.js и package.json:

Шаг 4. Зайти на сервер по SSH
Теперь нужно подключиться к серверу по SSH, чтобы установить Node.js и запустить бота. Для этого необходим SSH-клиент, например Putty, XShell, Bitvise SSH или любой другой. Функциональность программ может немного отличаться, но большой разницы в использовании между ними нет. Мы выбрали PuTTY как самый популярный и бесплатный SSH-клиент для Windows.
Открываем PuTTY, указываем IP-адрес сервера, порт 22 уже указан по умолчанию:

Нажимаем «Соединиться». Откроется окно с запросом логина:

Вводим root, после чего появится запрос пароля, при вводе которого символы не отображаются. Не стоит переживать, это особенность работы Linux — пароль нужно вводить вслепую. Чтобы не делать этого вручную, можно скопировать пароль и нажать правой кнопкой мыши в окне PuTTY. Убедитесь, что вы скопировали пароль без пробелов!
Шаг 5. Установить Node.js
Теперь займёмся установкой. Обратите внимание, что команды для установки Node.js отличаются в зависимости от операционной системы. В наших примерах указаны команды для Ubuntu, Debian и CentOS — мы будем вводить их в консоли SSH-клиента.
Если вы не знаете, какая ОС установлена на сервере, можете проверить это командой:
cat /etc/os-release
Вывод будет примерно таким:
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
Нас интересует поле NAME, в котором указано название дистрибутива.
Помимо Node.js нам понадобится утилита Screen, чтобы бот продолжал работать, когда мы отключимся от сервера. Также нужен менеджер пакетов npm для установки зависимостей.
Запустим команду:
-
для Ubuntu/Debian
apt -y install nodejs npm screen -
для CentOS
yum -y install nodejs npm screen
Подождём завершения установки и проверим, что Node.js работает:
nodejs -v
Если в ответе отобразилась версия установленного пакета, то всё прошло успешно.
Теперь перейдём в папку с файлом бота и установим зависимости:
cd /opt/keksbot
npm install
Возможные ошибки при установке, и как их решить
При установке могут появиться ошибки вида:
Existing lock /var/run/yum.pid: another copy is running as pid 9571.
Another app is currently holding the yum lock; waiting for it to exit...
или:
E: Could not get lock /var/lib/dpkg/lock – open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Обычно это связано с тем, что у пользователя недостаточно прав для установки пакетов на сервере, либо предыдущий процесс установки завершён некорректно.
В первом случае необходимо убедиться, что вы подключились к серверу под именем суперпользователя root — при необходимости зайдите на сервер заново.
Во втором случае для решения проблемы нужно завершить процесс менеджера пакетов и удалить lock-файлы. Чтобы это сделать, запустите команды:
-
для Ubuntu/Debian
ps aux | grep ‘apt|apt-get’ | awk ‘{print $2}’ | xargs kill -9 rm -f /var/cache/apt/archives/lock rm -f /var/lib/dpkg/lock rm -rf /var/lib/dpkg/lock-frontend -
для CentOS
ps aux | grep ‘yum’ | awk ‘{print $2}’ | xargs kill -9 rm -f /var/cache/apt/archives/lock rm -f /var/lib/dpkg/lock
После этого попробуйте заново запустить установку.
Шаг 6. Запустить и проверить бота
Пришло время запустить бота. Для начала запустим утилиту Screen простой командой:
screen
Перейдём в каталог с файлом бота:
cd /opt/keksbot
Установим зависимости:
npm install
После этого можем запустить бота:
nodejs index.js
Заходим в Telegram, проверяем бота:

Отлично! Всё работает.
Теперь можно отключиться от сервера и закрыть окно PuTTY, бот продолжит работу.
Шаг 7. Обеспечить автоматический перезапуск бота
Из-за ошибок в коде бот может «упасть» в самый неожиданный момент. Чтобы этого не случилось, настроим автозапуск бота при старте сервера и его автоматический перезапуск при ошибках.
Это позволит боту стабильно работать даже в случае обнаружения багов. Вы сможете оперативно их исправить, а бот в это время продолжит отвечать на запросы.
Большинство современных Linux-систем используют systemd для управления службами, поэтому следующая инструкция подойдёт для последних версий Ubuntu, Debian и CentOS.
Для начала отключим бота командой:
killall node
Нам понадобится создать собственную службу, для этого в каталоге /lib/systemd/system создадим файл:
имя_бота.service
В нашем случае это будет файл /lib/systemd/system/keksbot.service. В файл поместим следующий код:
[Unit]
Description=Keksbot - Telegram bot
After=network.target
[Service]
ExecStart=/usr/bin/node index.js
ExecReload=/usr/bin/node index.js
WorkingDirectory=/opt/keksbot/
KillMode=process
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Текст в некоторых строках необходимо отредактировать относительно вашего проекта. Разберём строки, на которые нужно обратить внимание.
В поле Description указывается описание службы. Вы можете указать в ней краткую информацию о боте.
Description=Keksbot - Telegram bot
Команда для запуска бота.
ExecStart=/usr/bin/node index.js
ExecReload=/usr/bin/node index.js
Её следует поменять, если имя скрипта вашего бота отличается от index.js. В таком случае нужно будет указать следующие значения:
ExecStart=/usr/bin/node имя_файла.js
ExecReload=/usr/bin/node имя_файла.js
Папка со скриптом, который мы запускаем. В нашем случае это /opt/keksbot/.
WorkingDirectory=/opt/keksbot/
Сохраняем файл. В примерах далее мы будем использовать имя службы keksbot — если вы указали другое имя, не забудьте поменять его. Для установки службы воспользуемся командами:
systemctl enable keksbot
Теперь запустим бота командой:
systemctl start keksbot
Готово. Теперь бот будет автоматически запускаться при старте сервера или при возникновении ошибок. Можно проверить это, завершив процесс node:
killall node
Через пять секунд бот автоматически перезапустится.
Помимо запуска мы можем управлять ботом командами:
-
Остановка
systemctl stop keksbot -
Перезапуск
systemctl restart keksbot -
Проверка состояния бота
systemctl status keksbot
Ещё о создании бота:
- Как написать Телеграм-бота на JavaScript
- Как настроить работу Телеграм-бота с Google Sheets
Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.
Телеграм бот
#main.py
import telebot
bot = telebot.TeleBot("ТОКЕН")
@bot.message_handler(func=lambda message: message.text.lower() in ['привет', 'здравствуйте'])
def send_welcome(message):
bot.reply_to(message, "Здравствуйте!")
@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.reply_to(message, 'Я тебя не понимаю(')
bot.infinity_polling()
Виртуальный сервер
Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210
рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.

Подключение к виртуальной машине
После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
ssh root@213.139.209.81
И введите пароль который вы указали при создании VPS.
Подготовка сервера
После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.
sudo apt update
sudo apt upgrade
Загрузка и запуск бота
Перейдите в каталог home и создайте папку для вашего проекта выполнив команды.
cd /home
mkdir ramziv_bot
cd ramziv_bot
Зайдите панель управления VPS и откройте Файловый менеджер.

Загрузите файлы вашего проекта на сервер, в моем случаи это только один файл main.py.

Установите зависимости вашего проекта, и запустите бота.
Примечание: Ubuntu 20.04 поставляется с установленной Python 3.8 из коробки, если для вашего проекта нужна другая версия, установите ее или используйте другую версию дистрибутива.
pip install pyTelegramBotAPI
python3 main.py
Теперь перейдите в Телеграм и протестируйте работу.

Работает.
Авто запуск и перезапуск телеграм бота
Создайте systemd службу для бота.
sudo nano /lib/systemd/system/ramziv_bot.service
С конфигурацией:
[Unit]
Description=Ramziv - Telegram Bot
After=syslog.target
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/ramziv_bot/
ExecStart=/usr/bin/python3 /home/ramziv_bot/main.py
RestartSec=60
Restart=always
[Install]
WantedBy=multi-user.target
Нажмите CTRL+S и CTRL+X что бы сохранить и выйти.
Выполните эти две команды что бы запустить службу.
sudo systemctl enable ramziv_bot
sudo systemctl start ramziv_bot
Ваш бот запушен. Перейдите в Телеграм и убедитесь в этом.
Заключение
Ваш бот будет всегда запускаться при старте системы, и перезапускается при возникновении ошибки. Для примера вы можете специально вызвать исключения в одной из функций обернутой обработчиком, и отследить ее в журнале командой:
sudo journalctl -u ramziv_bot.service
#Вывод
#Jun 13 12:35:31 objmnuqxoa python3[1069]: File "/home/ramziv_bot/main.py", line 7, in send_welcome
#Jun 13 12:35:31 objmnuqxoa python3[1069]: number = 1/0
#Jun 13 12:35:31 objmnuqxoa python3[1069]: ZeroDivisionError: division by zero
Официальный мануал не объясняет, как пользоваться ботом в «Телеграме». При отправке сообщений нередки сбои, кнопочное управление отключается. Перезапуск аккаунта поможет решить проблему при наличии инструкции. В случае со скрытым меню выявить возможные ошибки на API-сервере получится не сразу.
Чтобы узнать, работает ли робот, потребуется ввести специальную команду. Поскольку многие пользователи не знают о функциях роботов, опишу их особенности и возможности.
Содержание
- Для чего нужны боты в «Телеграме»
- Принцип работы ботов в ТГ
- Настройка бота в «Телеграме»
- На компьютере
- На смартфоне
- Как пользоваться ботами в «Телеграме»
- С готовым меню
- Скрытое меню
- Универсальные команды
- Дополнительные команды
- Перезапуск бота
- Обзор
Для чего нужны боты в «Телеграме»
Программы помогают пользователям массово отвечать на сообщения подписчиков, что упрощает взаимодействие с аудиторией. У роботов множество предназначений.
С их помощью делают рассылки, продают товары, проводят тренинги, принимают оплату и пр.
Роботов настраивают под любые задачи. Протокол отвечает за «апдейты» с сервером, HTTP-соединение с сайтами.
Предназначение роботов:
- Шаблонные ответы.
- Управление чатами в группах; фильтр спама, флуда.
- Комментирование ответов.
- Поиск информации в интернете.
- Загрузка файлов, ссылок, текстов.
- Показ данных онлайн (расписания, меню и т.д.).
- Предоставление услуг, реклама.
- Уведомление о действиях, событиях.
- Развлечения, игры.
- Общение, знакомства.
Функциональных ботов пишут на «Питоне» и других языках программирования с разметкой HTML. Однако это не значит, что новичок не справится с созданием простого робота. Сервисный API-Bot, с помощью которого программируют роботов, дополнен пошаговой инструкцией «Телеграма».
На настройки уходит не более 1 часа. Достаточно продумать текст и порядок диалога, задать кнопки управления.
Ввиду шаблонных ответов текстом дополнить меню получится только статичной информацией: подборками, списками, ссылками, медиафайлами, опросами. Этого достаточно, чтобы показать ассортимент витрины, провести исследование, поделиться знаниями или разослать письма подписчикам.
.jpg)
Принцип работы ботов в ТГ
Робот представляет собой аккаунт, взаимодействие с которым инициирует собеседник. Для этого используются встроенные команды и кнопки. Диалог выстраивается по системе «вопрос – ответ».
Принципы работы – последовательность, логичность и точность. Любой программе нужен алгоритм. Однако в случае с ботами цепочка операций должна быть понятна не только разработчику, но и пользователю.
При наличии кнопочного меню с подписями ошибки исключены. Делаете запрос – получаете ответ. Если диалог многоуровневый, возникает инвариантность выбора: разработчик предусматривает множество ответов.
При ошибках в программировании пользователь не находит действия и вынужден открывать другие ветки диалога, иногда с откатом в начало. Чтобы написать рабочую программу, продумывают удобный интерфейс взаимодействия.
Настройка бота в «Телеграме»
Создание программы доступно прямо в мессенджере с помощью официального робота BotFather, который регистрирует аккаунт и выдает ключ для модерации.
На компьютере
Чтобы настроить робота, авторизуйтесь по номеру, привязанному к аккаунту (сообщества).
Инструкция:
- Запустите @BotFather.
- Задайте имя на латинице с окончанием bot.
- Сохраните API-токен для управления ботом.
- Заполните профиль (описание, аватарку).
- Задайте команды и кнопки меню.
- Активируйте робота в чате (при необходимости).
.jpg)
На смартфоне
Порядок действий на телефоне аналогичный. Новичкам рекомендую выполнять настройки с ПК. Инструкцию удобно читать на большом экране.
Как пользоваться ботами в «Телеграме»
Диалогом управляют с помощью статичного меню с кнопками. Отдельные действия, такие как запуск робота, вызов справки и другие стандартные команды, доступны в строке ввода. Для отправки запроса в поле диалога записывают знак «слеша» и действие на латинице без пробела.
С готовым меню
Боты с клавиатурой используются для быстрого отображения ответа по нажатию кнопки. Интерфейс со статичным меню создают для доступа к «горячим» кнопкам, различного рода переходам. Инструмент пригодится для тематических подборок, блоков с контактной и платежной информацией.
Инструкция:
- Запустите диалог со «Старта».
- На панели тапните по кнопке с действием.
- Просмотрите информацию.
- Продолжите беседу, нажав другую кнопку.
Кнопочное меню упрощает взаимодействие с аккаунтом. Пользователю не приходится запоминать ветку диалога или перезагружать робота. Все активные запросы уже отображены на экране. Остается выбрать действие и перезапустить чат после очистки переписки.
.jpg)
Скрытое меню
Чтобы общаться с ботом, который не выводит справку после старта, вызывают контекстное меню. Для этого в строку ввода вбивают слеш. В выпадающем окне открывается список доступных команд на английском языке. В некоторых случаях меню доступно по кнопке множественного выбора.
Список ответов зависит от специализации робота. Не все боты работают по стандартным алгоритмам ТГ.
Часть скрытых кнопок представлена универсальными ссылками /start, /help и т.д. Другие действия настраиваются выборочно – Search, Info, Account, Referals и др. Если список переходов обширный, для быстрого поиска после слеша записывают первую букву кнопки.
.jpg)
Универсальные команды
Базовые кнопки для взаимодействия с интерфейсом разработаны ТГ:
- /help – показать инструкцию.
- /settings – настроить аккаунт, добавить данные.
- /info – вывести справку с информацией о боте.
- /off – удалить историю.
.jpg)
Дополнительные команды
Чтобы управлять ботом, используют команды из документации встроенного API-BotFather. Действия доступны разработчикам программ.
Перезапуск бота
Отправив /start, пользователь закрывает начатый диалог. В многоуровневых чатах действие позволит перезагрузить меню, если для запроса требуется переход в другую ветку.
Новички не знают, как пользоваться ботом в «Телеграме», если сервис не отвечает. Отправьте запрос в сообщении при отсутствии меню. Если аккаунт нерабочий, удалите чат, очистив историю.
Обзор
22
ответов
ну бот в разработке, чтоб он новые функции загрузил.
я не пробовал, но можно попробовать через subprocess наверн
Mars BATYA [NYА]
я не пробовал, но можно попробовать через subproce…
но имхо, можно подойти к этому с умом и юзать либу importlib, чтобы перезагружать не всего бота, а только измененный файл
Mars BATYA [NYА]
но имхо, можно подойти к этому с умом и юзать либу…
ну вообще умные люди уже придумали модули для перезагрузки проекта
Mars BATYA [NYА]
но имхо, можно подойти к этому с умом и юзать либу…
Ужасно, это не прокатит в 99% случаев
Aleksandr Danilov
gitlab, иди ты нахуй
он из коробки умеет измененный файл в запущенном боте перезагружать?
Я заметил что многие путают использование мата с токсичностью.
Это пиздец как грустно
Aleksandr Danilov
Я заметил что многие путают использование мата с т…
я не о том, друг
это не токсичность в чистом виде, ты прав, но обильное использование мата делает речь так или иначе более грубой, тем более если мы не слышим позитивную интонацию (что в рамках текстовых сообщений невозможно)
Denis 🐍|👑 🐳 | honey..?
я не о том, друг
это не токсичность в чистом виде,…
вот это куда точнее, и с этим я вполне согласен.
Речь не то что бы грубее конечно, скорее эмоциональнее, плюс моя манера написания
Aleksandr Danilov
вот это куда точнее, и с этим я вполне согласен.
…
со стороны (учитывая то что ты не выражаешь радость по поводу хорошего события, а скорее ведешь дискуссию или, в конкретном контексте, напоминаешь про существование определенного сервиса), эмоция выглядит не особо позитивной, а следовательно мат формирует (опять же, со стороны) более яркую негативную эмоцию (которая без мата бы была околонейтральной)
Denis 🐍|👑 🐳 | honey..?
со стороны (учитывая то что ты не выражаешь радост…
Это называется домыслом, и это порой хуёво.
🅸🄶🄾🅁 🆃🄾🄻🅂🅃🄾🅅
По каким словам гуглить ?
Если речь идёт про перезапуск при редактировании во время разработки бота то наверное что-то такое подойдёт
https://github.com/gorakhargosh/watchdog
Или посмотреть как в ювикорне сделано
https://github.com/encode/uvicorn/blob/master/uvicorn/supervisors/watchgodreload.py
зачем тогда придумали реакции?
Макс 🇺🇦 🇺🇦
зачем тогда придумали реакции?
лучше уж пусть плюсанет, словлю меншн и чекну, чем будет висеть это ссаное сердечко в списке чатов
Макс 🇺🇦 🇺🇦
зачем тогда придумали реакции?
У меня клиент без реакций
