Пишу бота на 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" (Да или нет). А если после этого вам нужно будет узнать погоду, бот будет распознавать название нужного вам города как один из ответов на вопрос по рассылке.
Как это исправить и заставить бота перестать искать новые сообщения после ответа на текущее?