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

Я впервые использую 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

Еще по теме:  Как в ТГ сделать 2 аккаунта на один номер телефона

Если вкратце вот код:

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)

Еще по теме:  Как из Телеграмма достать скаченные apk

Источник: husl.ru

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Как остановить выполнение всех потоков при помощи команды боту Telegram?

#1 Сен. 7, 2020 12:38:55

Как остановить выполнение всех потоков при помощи команды боту Telegram?

Пытаюсь создать бота Telegram на python. Этот бот по команде пользователя запускает многопоточность с разными циклами выполнения задачи. Мне необходимо сделать так, чтобы пользователь при вводе команды (в данном случае это /start) с определенным значением, например /start stop (значение stop), останавливал все потоки, а потом снова мог их успешно запустить командой.

#2 Сен. 7, 2020 21:17:18

Как остановить выполнение всех потоков при помощи команды боту Telegram?

Тебе надо сделать поток, управляющий потоками, и подписать его на сигнал перезапуска потоков. Когда команда будет поступать снаружи, при этом событии нужно подавать сигнал управляющему потоку, чтобы он отдал команды потокам остановиться/запуститься, которыми управляет.

Так что, возможно, это ещё рановато для тебя. Поучись сначала.

Источник: python.su

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