Python. Telegram bot. Не получается настроить бота с парой функций
Делаю простого бота, который по команде /start говорит приветствие и отображает две кнопки, с погодой (на основе OpenWeatherMap) и генератором фразы (по одному случайному слову из трех разных .txt файлов). Проблема в том, что никак не могу заставить все это работать вместе. В данном ниже коде следующие проблемы при работе:
После приветствия, при нажатии на кнопку "Погода", он отвечает как задумано - "Выберите город". Но одновременно с этим пишет "Ошибка! Город не найден!", хотя он должен по задумке писать ее после неправильно введенного города. Если далее ввести город, например Москва, то он покажет нужный ответ с погодой.
При нажатии кнопки "Генератор фраз" выкидывает "Ошибка! Город не найден!", хотя это не имеет отношение к этому никакого и он должен выдать фразу на русском из 3 случайных слов и все. Если функцию с генератором фраз запускать отдельно, то при нажатии на кнопку она работает корректно.
И еще, небольшой косметический момент не понятный мне как реализуется. Как сделать чтобы при нажатии на кнопку "Генератор фраз" он сразу выдавал фразу, без отправки в чат каждый раз самой фразы.
Не:
Генератор фраз
Иван Иванов из города Москва
Генератор фраз
Петр Петров из города Тула
Генератор фраз
Андрей Андреев из города Омск
А так:
Иван Иванов из города Москва
Петр Петров из города Тула
Андрей Андреев из города Омск
Код бота целиком:
import pyowm
import random
import telebot
from telebot import types
owm = pyowm.OWM('34a986575***********', language = "ru")
bot = telebot.TeleBot("35436*****************")
@bot.message_handler(commands=['start'])
def start_message(message):
# keyboard
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('Погода')
item2 = types.KeyboardButton('Генератор фраз')
markup.add(item1, item2)
bot.send_message(message.chat.id, "Привет. Что ты хочешь {0.first_name}?".format(message.from_user, bot.get_me()), parse_mode='html', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def real_time_weather(message):
if message.text == 'Погода':
bot.send_message(message.chat.id, 'Выберите город')
try:
observation = owm.weather_at_place(message.text)
w = observation.get_weather()
answer = "В городе " + message.text + " сейчас " + w.get_detailed_status() + "\n"
bot.send_message(message.chat.id, answer)
except:
bot.send_message(message.chat.id,'Ошибка! Город не найден.')
def phrase_generator(message):
if message.text == 'Генератор фраз':
random_line = random.choice(open("name.txt", 'r', encoding='utf-8').read().split('\n')) + " " + random.choice(open("surname.txt", 'r', encoding='utf-8').read().split('\n')) + " из города " + random.choice(open("city.txt", 'r', encoding='utf-8').read().split('\n'))
bot.send_message(message.chat.id, random_line)
bot.polling()