Показывает одно и тоже значение в кнопке
@bot.message_handler(content_types=["text"])
def get_weather(message):
code_to_smail = {
"Clear": 'Ясно\U00002600',
"Clouds": 'Облачно\U00002601',
"Rain": 'Дождь\U0001F327',
"Thunderstorm": 'Гроза\U000026C8',
"Mist": 'Туман\U0001F32B',
"Snow": 'Снег\U00002744',
}
city = message.text.strip().lower()
res = requests.get(f'https://api.openweathermap.org/data/2.5/weather?q=
{city}&units=metric&lang=ru&appid={API}')
with open(log_path, "a") as f:
f.write("сообщение старт")
if res.status_code == 200:
with open(log_path, "a") as f:
f.write(str(res))
data = json.loads(res.text)
with open(log_path, "a") as f:
f.write(str(data))
temp = data["main"]["temp"]
weather_description = data['weather'][0]['main']
if weather_description in code_to_smail:
wd = code_to_smail[weather_description]
else:
wd = 'Не могу распознать что там, посмотри сам'
feels_like = data["main"]["feels_like"]
temp_min = data['main']['temp_min']
pressure = data["main"]["pressure"]
humidity = data["main"]["humidity"]
wind = data["wind"]["speed"]
kb = types.InlineKeyboardMarkup(row_width=1)
btn = types.InlineKeyboardButton(text='Доп.информация', callback_data='btn1')
kb.add(btn)
bot.send_message(message.chat.id,
f'· На улице: {wd}\n'
f'· Температура: {int(temp)}°C\U0001f321\n'
f'· Но по ощущениям {int(feels_like)}°C\n'
f'· Давление: {pressure} мм.рт.ст\n'
f'· Ветер: {wind} м/с\n'
f'· Влажность: {humidity} %\n'
f'<b>Я рад был подсказать тебе погоду\n</b>'
f'<b>Всего доброго!\n</b>', parse_mode='html', reply_markup=kb)
else:
bot.send_message(message.chat.id, f'Город указан неверно, попробуй еще раз!')
@bot.callback_query_handler(func=lambda callback: callback.data) # создаем команду
def check_callback_data(callback):
if callback.data == 'btn1':
bot.send_message(message.chat.id, f'{temp_min}')
Проблема в том что когда один какой то пользователь введет город значения остаются и не меняются, получается нажав на кнопку висит одно и тоже значение хотя должно меняться, в чем проблема может быть? @bot.callback_query_handler(func=lambda callback: callback.data) находится внутри редактора, так как функция "temp_min" не глобальна. Напишите пожалуйста исправленным кодом, я уже ломаю голову перелистал интернет ничего не нашел.
Вот скрин бота сверху ввел другой город снизу другой но значения не меняются. Подскажите пожалуйста в чем проблема.
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Если я правильно понял вашу проблему:
import telebot
from telebot import types
API = 'Токен'
bot = telebot.TeleBot(API)
@bot.message_handler(content_types=["text"])
def get_weather(message):
city = message.text.strip()
kb = types.InlineKeyboardMarkup(row_width=1)
btn = types.InlineKeyboardButton(text='Доп.информация', callback_data=f'btn1_{city}')
kb.add(btn)
bot.send_message(message.chat.id,
f'Моё сообщение - ура, оно тут: {city}\n'
f'<b>Дополнительная информация:</b>', parse_mode='html', reply_markup=kb)
@bot.callback_query_handler(func=lambda callback: callback.data.startswith('btn1_'))
def check_callback_data(callback):
city = callback.data.split('_')[1]
bot.send_message(callback.message.chat.id, f'Пишет бот: {city}')
bot.polling(none_stop=True)

