Как остановить телеграм бота на python
Перейти к содержимому

Как остановить телеграм бота на python

  • автор:

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

Vindicar

Это будет непросто.
Стандартный 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *