Я впервые использую python для управления ботом Telegram. Я запускаю этот код ниже и хочу, чтобы бот перестал работать. Может ли кто-нибудь научить меня, как остановить бот телеграммы?
import time import random import datetime import telepot from telepot.loop import MessageLoop def bot_test(msg): chat_id = msg[‘chat’][‘id’] command = msg[‘text’] print(‘Got command:’,command) #text from telegram if command == ‘/roll’: bot.sendMessage(chat_id, random.randint(1, 2)) elif command == ‘/time’: bot.sendMessage(chat_id, str(datetime.datetime.now())) bot = telepot.Bot(‘bot token’) MessageLoop(bot, bot_test).run_as_thread() print (‘I am listening . ‘) while 1: time.sleep(10)
user14642136 15 ноя ’20 в 14:52 2020-11-15 14:52
2020-11-15 14:52
1 ответ
В while цикл никогда не завершается, поскольку он всегда верен и не имеет break заявления. Вы можете изменить это так:
while 1: time.sleep(10) break
Редактировать:
Вы также можете изменить while цикл к этому:
while time.sleep(10): break
Теперь он завершает цикл через 10 секунд, и таким образом вы можете сделать свой код короче вместо того, чтобы писать while 1 .
Как остановить бота в Телеграм?
Источник: stackru.com
Как останавить telegram бота (aiogram) при любой ошибке?
Telegram бот написан на python при помощи библиотеки aiogram. Есть необходимость останавливать самого бота и закрывать программу при возникновении ошибок, которые касаются непосредственно библиотеки aiogram.
В качестве примера ошибки можно рассмотреть ( или любую другую которая возникает внутри библиотеки aiogram):
aiogram.utils.exceptions.TerminatedByOtherGetUpdates: Terminated by other getupdates request; make sure that only one bot instance is running
Если вкратце вот код:
from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor from config import TOKEN if __name__ == ‘__main__’: bot = Bot(token=TOKEN) dp = Dispatcher(bot) executor.start_polling(dp)
Пробовал оборачивать executor.start_polling(dp) в конструкцию try, except . Однако это не помогло ибо ошибка возникала внутри executor.start_polling(dp) и тем самым не имела никакого влияния на try, except главной функции.
Что необходимо сделать для остановки бота в случаем ошибки и закрытием самой программы?
Ответы (1 шт):
Вы должны понимать, что говоря уже о любой ошибке можно говорить и о 100 ошибках возникших при работе с aiogram, так как никто не знает на сколько вы правильно пишите код и никто не знает с какой ошибкой вы можете столкнуться в процессе работы с библиотекой, поэтому если вы хотите обрабатывать все ошибки, читайте моё краткое руководство, которое я написал ниже.
Первым делом вам необходимо найти файл exceptions.py в папке utils с aiogram , сделать это можно просто, к примеру создать специально какую-либо ошибку в боте, вам отобразится путь, найдете этот путь либо просто перейдете по нему ( нажав на подобную строчку в VS Code или в ином редакторе, если там имеется такая возможность ), у меня этот путь:
Телеграмм-боты на Python
C:UsersMaximAppDataLocalProgramsPythonPython39Libsite-packagesaiogramutils
Открываете файл exceptions.py затем изменяете вашу функцию detect , которая по умолчанию будет иметь такой код:
def detect(cls, description): description = description.lower() for err in cls.__subclasses: if err is cls: continue if err.check(description): raise err(cls.text or description) raise cls(description)
Изменить свою функцию вы должны на этот код:
def detect(cls, description): description = description.lower() for err in cls.__subclasses: if err is cls: continue if err.check(description): os._exit(0) raise err(cls.text or description) os._exit(0) raise cls(description)
Также не стоит забывать, что необходимо импортировать и сам os , import os , для примера я решил написать такой вот код:
В итоге когда вы попытаетесь запустить код, через секунду у вас перестанет работать бот, так как произошла ошибка:
raise err(cls.text or description) aiogram.utils.exceptions.MessageTextIsEmpty: Message text is empty
Однако от этого появляется один минус, так как вы не знаете где именно произошла ошибка и на какой строке она была допущена, поэтому вы можете дописать перед двумя os._exit(0) вот эту строку print(cls.text or description) , так вы и сможете понять с чем была связана ошибка и почему ваш код / бот перестал выполняться, дальше остается найти только саму строку и изменить её. В итоге ваша функция detect должна выглядеть следующим образом:
def detect(cls, description): description = description.lower() for err in cls.__subclasses: if err is cls: continue if err.check(description): print(cls.text or description) os._exit(0) raise err(cls.text or description) print(cls.text or description) os._exit(0) raise cls(description)
Источник: husl.ru
Python-сообщество
- Начало
- » Python для новичков
- » Как остановить выполнение всех потоков при помощи команды боту Telegram?
#1 Сен. 7, 2020 12:38:55
Как остановить выполнение всех потоков при помощи команды боту Telegram?
Пытаюсь создать бота Telegram на python. Этот бот по команде пользователя запускает многопоточность с разными циклами выполнения задачи. Мне необходимо сделать так, чтобы пользователь при вводе команды (в данном случае это /start) с определенным значением, например /start stop (значение stop), останавливал все потоки, а потом снова мог их успешно запустить командой.
#2 Сен. 7, 2020 21:17:18
Как остановить выполнение всех потоков при помощи команды боту Telegram?
Тебе надо сделать поток, управляющий потоками, и подписать его на сигнал перезапуска потоков. Когда команда будет поступать снаружи, при этом событии нужно подавать сигнал управляющему потоку, чтобы он отдал команды потокам остановиться/запуститься, которыми управляет.
Так что, возможно, это ещё рановато для тебя. Поучись сначала.
Источник: python.su