Answer the question
In order to leave comments, you need to log in
Telegram bot. How can the information entered by the user be read?
It is necessary to read the information entered by the user in the cityconfirm function and pass this data to getweather, can you tell me how to do this?)
I'm still quite new to python and to creating bots too, so don't swear too much at the code)
Thank you very much in advance!
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)
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question