Нужно считать информацию введённую пользователем в функции cityconfirm и передать эти данные в getweather, не подскажете как это сделать?)
Я ещё совсем новичек в питоне та и в создании ботов тоже, так что сильно на код не ругайтесь)
Заранее большое спасибо!
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button_city = types.KeyboardButton(text="Ввести назву свого міста")
button_geo = types.KeyboardButton(text="Відправити геолокацію", request_location=True)
keyboard.add(button_city, button_geo)
keyboard2 = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button_today = types.KeyboardButton(text="Сьогодні")
button_tomorrow = types.KeyboardButton(text="Завтра")
button_week = types.KeyboardButton(text="Тиждень")
button_setings = types.KeyboardButton(text="Налаштування")
keyboard2.add(button_today, button_tomorrow, button_week, button_setings)
@bot.message_handler(commands=['help'])
def help(message):
bot.send_message(message.chat.id, '/start - Запуск бота\n/help - Команди бота\n Для того,' +
'щоб дізнатися погоду напишіть назву свого міста, або відправте свою геолокацію')
@bot.message_handler(commands=['start'])
def start (message):
bot.send_message(message.chat.id, 'Мої вітання, ' + str(message.from_user.first_name) + '! ' + '\n' +
'Я TeleWeatherBot' + '\n' +
'Я допоможу тоді дізнатися погоду в потрібному місті ☀️☁️☔️❄️' )
msg = bot.send_message(message.chat.id, 'Для початку введи назву свого міста, або відправте свою геолокацію :', reply_markup=keyboard)
bot.register_next_step_handler(msg, cityenter)
def cityenter(message):
if message.text == 'Ввести назву свого міста':
msg = bot.send_message(message.chat.id, 'Введіть назву свого міста')
bot.register_next_step_handler(msg, cityconfirm)
elif message.text:
msg = bot.send_message(message.chat.id, 'Натисніть на потрібну для вас кнопку!')
bot.register_next_step_handler(msg, cityenter)
def cityconfirm(message):
try:
city_name = message.text
params = {'APPID': api_weather, 'q': city_name, 'units': 'metric', 'lang': 'ua'}
result = requests.get(url, params=params)
weather = result.json()
if weather["main"]['temp'] < 10:
status = "Зараз холодно!"
bot.send_message(message.chat.id, 'Ваша локація успішно збережена!', reply_markup = types.ReplyKeyboardRemove())
msg = bot.send_message(message.chat.id, 'Виберіть потрібну для вас кнопку', reply_markup = keyboard2)
bot.register_next_step_handler(msg, getweather)
except:
msg = bot.send_message(message.chat.id, "Місто " + city_name + " не знайдено!" + "\n"
"Введіть назву міста заново, або відправте геолокацію")
bot.register_next_step_handler(msg, cityconfirm)
def getweather(message):
if message.text == 'Сьгодні':
city_name = message.text
params = {'APPID': api_weather, 'q': city_name, 'units': 'metric', 'lang': 'ru'}
result = requests.get(url, params=params)
weather = result.json()
if weather["main"]['temp'] < 10:
status = "Зараз холодно!"
elif weather["main"]['temp'] < 20:
status = "Зараз прохолодно!"
elif weather["main"]['temp'] > 38:
status = "Зараз жарко!"
else:
status = "Зараз чудова температура!"
bot.send_message(message.chat.id,
"В місті " + str(weather["name"]) + " температура: " + str(float(weather["main"]['temp'])) + " ℃\n" +
"Максимальна температура: " + str(float(weather['main']['temp_max'])) + " ℃\n" +
"Мінімальна температура: " + str(float(weather['main']['temp_min'])) + " ℃\n" +
"Швидкість вітру: " + str(float(weather['wind']['speed'])) + " м\с\n" +
"Тиск: " + str(float(weather['main']['pressure'])) + " Н/м²\n" +
"Вологість: " + str(int(weather['main']['humidity'])) + " %" + "\n" +
"Видимість: " + str(weather['visibility']) + " м.\n" +
"Зараз: " + str(weather['weather'][0]["description"]) + ".\n\n" + status)
if __name__ == '__main__':
bot.polling(none_stop=True, interval = 0)