Как перезапустить бота в Телеграмме python

У меня есть бот-переводчик в группе телеграмм. Он переводит все сообщения, которые вводит каждый член группы.

Но иногда это раздражает, когда загружается множество текстов, поэтому я хочу сделать паузу на некоторое время и перезапустить, набрав какой-то порядок, например

Как вы думаете, это будет возможно сделать? мне нужны подсказки

text=update.message.text.lower() def handler(update, context): if «/start» in text: try: if text_src==lang_type[0]: a = ‘ko : ‘ + translator.translate(user_text, dest=lang_type[0]).text + ‘n’ + ‘en : ‘ + translator.translate(user_text, dest=lang_type[1]).text + ‘n’ + ‘es : ‘ +translator.translate(user_text, dest=lang_type[2]).text telegram.Bot(TelegramToken).send_message(user_id, reply_to_message_id=update.message.message_id, text=a) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[2]).text) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[3]).text) elif text_src==lang_type[1]: b = ‘en : ‘ + translator.translate(user_text, dest=lang_type[1]).text + ‘n’ + ‘ko : ‘ + translator.translate(user_text, dest=lang_type[0]).text + ‘n’ + ‘es : ‘ + translator.translate(user_text, dest=lang_type[2]).text telegram.Bot(TelegramToken).send_message(user_id, reply_to_message_id=update.message.message_id, text=b) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[2]).text) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[3]).text) elif text_src==lang_type[2]: c = ‘es : ‘ + translator.translate(user_text, dest=lang_type[2]).text + ‘n’ + ‘ko : ‘ + translator.translate(user_text, dest=lang_type[0]).text + ‘n’ + ‘en : ‘ + translator.translate(user_text, dest=lang_type[1]).text telegram.Bot(TelegramToken).send_message(user_id, reply_to_message_id=update.message.message_id, text=c) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[1]).text) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[3]).text) except: pass if «/end» in text: pass

Я не думаю, что это сработает, и на самом деле не работает. Буду признателен, если вы исправите некоторые

КАК ПЕРЕЗАПУСТИТЬ БОТА

hyunseo 2 Мар 2022 в 02:58

Что такое text ? Почему вы проверяете «/start» в text ? Вам лучше установить некоторую переменную global , т.е. paused = False — и используйте команду /start для установки paused = True и /end для установки paused = False . И другие команды должны выполняться в if not paused: .

2 Мар 2022 в 03:31

Извините, но можете ли вы уточнить свое объяснение по коду, ответив на вопрос? Я не легко понимаю, что вы имеете в виду под этим извините

Еще по теме:  Выскакивает сообщение с конкретной группы в Телеграме поверх всех приложений

2 Мар 2022 в 04:35

1 ответ

Лучший ответ

Вы можете использовать глобальную переменную, чтобы контролировать, когда она может переводить, а когда нет, т. е. paused . И используйте сообщение /start , чтобы установить его False , и /end , чтобы установить его True .

+++Как перезапустить бота в Telegram.

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

Код также должен проверять идентификатор пользователя, чтобы это мог сделать только администратор.

paused = False # created outside functions def handler(update, context): global paused # inform function to use external variable instead of local variable text = update.message.text.lower().strip() if text == ‘/start’: paused = False return if text == ‘/end’: paused = True return if not paused: try: if text_src==lang_type[0]: a = ‘ko : ‘ + translator.translate(user_text, dest=lang_type[0]).text + ‘n’ + ‘en : ‘ + translator.translate(user_text, dest=lang_type[1]).text + ‘n’ + ‘es : ‘ +translator.translate(user_text, dest=lang_type[2]).text telegram.Bot(TelegramToken).send_message(user_id, reply_to_message_id=update.message.message_id, text=a) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[2]).text) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[3]).text) elif text_src==lang_type[1]: b = ‘en : ‘ + translator.translate(user_text, dest=lang_type[1]).text + ‘n’ + ‘ko : ‘ + translator.translate(user_text, dest=lang_type[0]).text + ‘n’ + ‘es : ‘ + translator.translate(user_text, dest=lang_type[2]).text telegram.Bot(TelegramToken).send_message(user_id, reply_to_message_id=update.message.message_id, text=b) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[2]).text) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[3]).text) elif text_src==lang_type[2]: c = ‘es : ‘ + translator.translate(user_text, dest=lang_type[2]).text + ‘n’ + ‘ko : ‘ + translator.translate(user_text, dest=lang_type[0]).text + ‘n’ + ‘en : ‘ + translator.translate(user_text, dest=lang_type[1]).text telegram.Bot(TelegramToken).send_message(user_id, reply_to_message_id=update.message.message_id, text=c) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[1]).text) # telegram.Bot(TelegramToken).send_message(user_id,translator.translate(user_text, dest=lang_type[3]).text) except Exception as ex: print(‘Exception:’, ex)

Источник: question-it.com

Перезапуск телеграмм-бота в случае ошибки.

При использовании телеграмм-бота на сервере, работающим под linux перезапустить упавший скрипт Python, в случае использования bot.polling , можно при помощи systemd или supervisor .

Разберем случай с менеджером системных и служб systemd .

Systemd представляет собой программный комплекс, который содержит набор системных компонентов для операционных систем Linux. Его основная цель — унифицировать конфигурацию и поведение служб в дистрибутивах Linux. Основным компонентом systemd является «менеджер систем и служб» — система инициализации, используемая для загрузки пользовательского пространства и управления пользовательскими процессами.

Еще по теме:  Вы часто удаляли и создавали свой аккаунт заново Телеграмм

Проще говоря, системный менеджер systemd запустит любой скрипт (в том числе и скрипт Python телеграмм-бота) при старте системы, и будет перезапускать его в случае падения.

Установим системный менеджер systemd , если отсутствует:

$ apt-get install systemd
$ 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

Источник: docs-python.ru

Как запустить Python Telegram бота на VPS

Как запустить Python Telegram бота на VPS

Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.

Телеграм бот

Виртуальный сервер

Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.

Как запустить Python Telegram бота на VPS

Подключение к виртуальной машине

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

Как запустить Python Telegram бота на VPS

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:

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

И введите пароль который вы указали при создании VPS.

Подготовка сервера

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

sudo apt update sudo apt upgrade

Загрузка и запуск бота

Перейдите в каталог home и создайте папку для вашего проекта выполнив команды.

cd /home mkdir ramziv_bot cd ramziv_bot

Зайдите панель управления VPS и откройте Файловый менеджер.

Как запустить Python Telegram бота на VPS

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

Как запустить Python Telegram бота на VPS

Установите зависимости вашего проекта, и запустите бота.

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

pip install pyTelegramBotAPI python3 main.py

Теперь перейдите в Телеграм и протестируйте работу.

Как запустить Python Telegram бота на VPS

Авто запуск и перезапуск телеграм бота

Создайте 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

Источник: ramziv.com

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