danural
@danural
Junior Python Dev

Как реализовать прекращение функции в telebot?

Пишу бота на Python, который бы выдавал погоду по запросу. Для этого использую pyowm и telebot.
При тестировании бота выявил последовательность, приводящую к неисправности бота.
Весь код вставлять не буду, а вставлю деталь, приводящую к неисправности.
@bot.message_handler(commands=['weather'])
def handle_text(message):
	bot.send_message(message.chat.id,'Введите название города или страны на русском или английском.')
	@bot.message_handler(content_types=['text'])
	def handle_text(message):
		city = message.text
		observation = owm.weather_at_place(city)
		w = observation.get_weather()
		temp = w.get_temperature('celsius')['temp']
		wind = w.get_wind()['speed']
		bot.send_message(message.chat.id, "В " + city + " сейчас " + w.get_detailed_status() + ',' + str(temp) + " градусов, " + 'ветер ' + str(wind) + ' м/с.')

@bot.message_handler(commands=["subscribe"])
def handle_text(message):
	bot.send_message(message.chat.id, "Хотите подписаться на рассылку погоды по Екатеринбургу? Сообщения будут приходить каждый день в 8:00")
	@bot.message_handler(content_types=['text'])
	def send_text(message):
		if message.text == 'Нет':
			bot.send_message(message.chat.id, 'Отмена...')
		elif message.text == 'Да':
			bot.send_message(message.chat.id, 'Подключен к рассылке на 8:00')
			def msg():
				observation = owm.weather_at_place("Yekaterinburg")
				w = observation.get_weather()
				temp = w.get_temperature('celsius')['temp']
				wind = w.get_wind()['speed']
				bot.send_message(message.chat.id, "В Екатеринбурге сейчас " + w.get_detailed_status() + ',' + str(temp) + " градусов, " + 'ветер ' + str(wind) + ' м/с.')


Проблема в том, что когда пользователь вводит команду /subscribe, бот начинает ожидать ответ на вопрос "Хотите подписаться на рассылку погоды по Екатеринбургу? Сообщения будут приходить каждый день в 8:00" (Да или нет). А если после этого вам нужно будет узнать погоду, бот будет распознавать название нужного вам города как один из ответов на вопрос по рассылке.

Как это исправить и заставить бота перестать искать новые сообщения после ответа на текущее?
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 1
shabelski89
@shabelski89
engineer
Уберите хендлер
@bot.message_handler(content_types=['text'])
используйте
bot.register_next_step_handler
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы