У меня есть бот-переводчик в группе телеграмм. Он переводит все сообщения, которые вводит каждый член группы.
Но иногда это раздражает, когда загружается множество текстов, поэтому я хочу сделать паузу на некоторое время и перезапустить, набрав какой-то порядок, например
Как вы думаете, это будет возможно сделать? мне нужны подсказки
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
Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.
Телеграм бот
Виртуальный сервер
Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.
Подключение к виртуальной машине
После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.
Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
И введите пароль который вы указали при создании 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
Источник: ramziv.com