@garadon

Telegram bot. Как можно считать информацию введённую пользователем?

Нужно считать информацию введённую пользователем в функции 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)
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
@o5a
register_next_step_handler поддерживает указание дополнительных параметров вызова функции:
bot.register_next_step_handler(msg, getweather, city_name)

Соответственно надо будет изменить саму getweather, чтобы понимала этот параметр
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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