Python + Telegram. Как остановить остановить polling?
Всем привет. Есть необходимость вводить номер с картинки (штрих код), картинка появляется в каталоге раз в час. Хочу вводить число с картинки не находясь рядом с компьютером. Пришла мысль использовать Telegram бота. Вот вырезка из кода:
Кликните здесь для просмотра всего текста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def send_code(): photo = open('screen.png', 'rb') sent = bot.send_photo(CHATID, photo) bot.register_next_step_handler(sent, insert_code) bot.polling(timeout=1) def insert_code(message): text_code = message.text print(text_code) #в оригинале программы тут иначе. text_code вводится в определенное поле страницы, через selenium sleep(1) bot.stop_polling() while True: send_code() sleep(3600)
И все вроде бы как задумано. Но иногда работа программы останавливается. Это происходит в рандомные интервалы. Программа может отработать 1 час, а может 5 часов. Прерывается именно на этапе возврата текста кода. Т.е. программа исправно посылает мне картинку, я пишу число. отправляю и получаю error, не могу за сегодня поймать эту ошибку (как назло, работает гад исправно), но содержание ее много текста, в котором пишется что telegram API что-то там. Ну т.е. понятно, что программу стопорит именно телеграмная часть. Только вот почему. Может поллинг я как-то не так останавливаю, но тогда бы приложение «падало» на любом этапе работы, а не на возврате текста. Я в программировании новичок, буду признателен за помощь.
Перезапуск телеграмм-бота в случае ошибки
При использовании телеграмм-бота на сервере, работающим под 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
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Переход на асинхронный python-telegram-bot версии 20.x
- Чистый интерфейс Python для Telegram Bot API
- Команды и оповещения @BotFather в Telegram
- Обработка сообщений модулем python-telegram-bot
- Фильтры сообщений модуля python-telegram-bot
- Хранение временных данных модулем python-telegram-bot
- Настройки по умолчанию модуля python-telegram-bot
- Планировщик сообщений модуля python-telegram-bot
- Форматирование и отправка сообщений в python-telegram-bot
- Работа с файлами/media, модуль python-telegram-bot
- Меню из кнопок, модуль python-telegram-bot
- Объект CallbackContext модуля python-telegram-bot
- Подключения Telegram-бота через webhook
- Обработка исключений модуля python-telegram-bot
- Создание Inline-бота, модуль python-telegram-bot
- Работа с опросами в модуле python-telegram-bot
- Создание разговоров ConversationHandler в python-telegram-bot
- Перезапуск телеграмм-бота в случае ошибки
- Декоратор-обработчик сообщений в python-telegram-bot
- Авторизация на сайте через Telegram Passport
- Ведение публикаций в Telegram-канале с python-telegram-bot
- UTF коды emoji/эмодзи для отправки в Telegram из Python
Как остановить работу Телеграмм Бота?
Всем привет, пишу бота на aiogram, мне необходимо сделать так, чтобы я смог остановить работу бота при помощи ввода данных в саму программу, а не в бот. Возможно ли как то это реализовать?
- Вопрос задан более года назад
- 2996 просмотров
2 комментария
Простой 2 комментария
Чтобы понять где выключить, нужно понять где запускаешь))
Я бывает через Pycharm запускаю обработку там просто стоп нажать ) на Ubuntu просто Ctrl+C нажимаю )
Дополни)
memsartem @memsartem Автор вопроса
inworkl, просто мне нужно остановить выполнение
if __name__ == '__main__': executor.start_polling(dp)
с помощью ввода команды в консольную строку программы
Решения вопроса 1

Это будет непросто.
Стандартный input() — строго синхронный, он остановит выполнение программы до своего завершения.
Можно попробовать что-то в духе:
import asyncio loop = asyncio.get_event_loop() bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot) async def delay_exit(): #запускаем input() без параметров в отдельном потоке # await не продолжит выполнение, пока поток не отработает # но в то же время цикл бота будет работать независимо от этого потока await loop.run_in_executor(None, input) dp.stop_polling() await dp.wait_closed() await bot.close() if __name__ == '__main__': loop.create_task(delay_exit()) # планируем выполнение delay_exit() и продолжаем loop.run_until_complete(dp.start_polling()) # работаем, пока dp.start_polling() не выполнится
Как остановить бота в Telegram за 3 секунды?
Знакома ли вам ситуация, когда вы запустили бота в Telegram, решили свою задачу и ушли, а через некоторое время он начинает надоедать вам сообщениями?
Если да, то в этой статье мы расскажем, как правильно работать с уведомлениями ботов и отключить надоедливых ботов навсегда.
Почему это происходит?
Чат-бот — это такое же приложение в вашем телефоне, как и любое другое. Мы писали об этом в нашей предыдущей статье.
В большинстве случаев уведомления, которые вы получаете от чат-ботов, говорят вам о важных изменениях. Например, ваша заявка была исполнена или персонаж в игре достиг нового уровня.
Но иногда разработчики чересчур увлекаются такими уведомлениями, и это начинает раздражать. Как справиться с этим, смотрите ниже в разделе «Настройка уведомлений».
Вторым распространённым случаем являются рекламные сообщения. Не секрет, что для поддержания работоспособности бота и его развития владельцам приходится нести расходы на инфраструктуру, зарплаты, аренду и проч. Если бот не позволяет зарабатывать напрямую, то многие из них прибегают к модели adware, когда приложение остаётся бесплатным, а пользователям время от времени показывается реклама. В большинстве приложений это разумный компромисс, но иногда разработчики перегибают палку, и реклама начинает литься, как из рога изобилия. Помочь с этим могут советы из раздела «Управление рекламой».
Наконец, третьим, и наиболее опасным, случаем является взлом и рассылка уведомлений пользователям бота. Это может произойти как из-за утечки токена авторизации бота, при которой злоумышленник может перехватить контроль над каналом связи с пользователями (дефейс), так и из-за более глубокого взлома. Что нужно делать, если вы с этим столкнулись, описано в главе «Взломанный бот».
Что делать?
Настройка уведомлений
Обычно достаточно предпринять следующие шаги:
1. Перейдите в бота
2. Найдите раздел с настройкой уведомлений (обычно он находится в разделе Account/Профиль или Settings/Настройки)
3. Выберите те уведомления, которые вы хотите получать, и их частоту
Если такого раздела нет, то сделайте следующее:
1. Найдите бота в списке чатов
2. Смахните его влево, чтобы открылись кнопки как на рисунке ниже
3. Нажмите Mute, чтобы перевести уведомления в тихий режим
4. Перейдите на страницу бота в Bots Club и оставьте комментарий разработчикам о большом количестве сообщений
5. Если разработчик долго не отвечает, попробуйте найти его контакт в описании бота в Telegram и написать ему лично
Будьте вежливы и конструктивны — зачастую владельцы ботов будут рады помочь вам и завоевать ваше доверие.
Управление рекламой
Реклама может быть назойливой, это правда. Тем не менее, постарайтесь сохранить хладнокровие и выполнить эти шаги:
1. Переведите бота в тихий режим, как было описано выше
2. Оставьте отзыв с низкой оценкой на странице бота в Bots Club. Динамика рейтинга приложения — очень значимый фактор для разработчиков, и его резкое снижение привлечёт их внимание
3. Если проблема была решена, не забудьте поблагодарить и поставить хорошую оценку
Взломанный бот
Если вам показалось, что бот выглядит не так, как всегда, и был взломан, то вот что нужно сделать:
1. Прекратите использование бота и переведите его в тихий режим
2. Проверьте релиз ноты и комментарии других пользователей на странице бота в Bots Club — возможно, разработчики просто выкатили большое обновление
3. Если подозрения остаются, оставьте отзыв разработчикам — тем самым, вы предупредите других пользователей и дадите своевременный сигнал
Самое главное — помните, что, если бот подвергся дефейсу, он не сможет получить от вас больше информации, чем вы сами ему предоставите. Поэтому при малейших подозрениях просто прекратите использование бота и уведомьте разработчиков!
К чёрту подробности, какая планета?
Если вы всё же решили навсегда прекратить отношения с ботом, остановить его и убрать из своего списка чатов, то вот что нужно делать:
1. Попросите поддержку бота удалить ваш аккаунт. Если его владельцы работают в России или ЕС, они обязаны это сделать по закону.
2. Найдите бота в списке чатов, смахните влево и выберите Delete
3. Выберите Delete and Stop
Через 5 секунд бот будет окончательно остановлен, и история переписки с ним будет удалена из ваших чатов.
Тем не менее, важно понимать, что:
1. История переписки могла остаться на серверах разработчика бота;
2. Если вы не удалили аккаунт через поддержку, то при повторном заходе в бота он вас «узнает» и, зачастую, продолжит с той точки, на которой вы остановились.
TL; DR
• Найти бота в списке чатов
• Выбрать Delete
• Нажать Delete and Stop
• Оставить отзыв о боте на Bots Club