Помогите разобраться с погода ботом

Решил я написать простенького погодабота все хорошо, ошибок не выдает, но он и не отвечает мне на мои запросы, вот сам код

@dp.message_handler(commands=['start'])
 async def welcome(message):
 await message.reply("Добро пожаловать!\nЯ - <b>Погода-бот</b>, бот созданный чтобы всегда знать погоду.\n<b>Укажите город</b>", parse_mode='html')

@dp.message_handler()
 async def cites(meassge: types.Message):
 global city
 city = meassge.text
 keybord = types.InlineKeyboardMarkup()
 item1 = types.InlineKeyboardButton("Температура", callback_data='temp')
 item2 = types.InlineKeyboardButton("Состояние погоды", callback_data='weather')
 item3 = types.InlineKeyboardButton("Как мне одется", callback_data='clothes')
 item4 = types.InlineKeyboardButton("Все сразу", callback_data='all')
 keybord.add(item1, item2, item3, item4)
 await meassge.answer('Выберите, что хотите узнать', reply_markup=keybord)

@dp.message_handler(lambda c: c.data == 'temp')
 async  def temp(call: types.CallbackQuery):
 weather = await client.get(city)

 resp_msg = weather.nearest_area.name + ", " + weather.nearest_area.country + "\n"
 resp_msg += f"Текущая температура: {weather.current.temperature}°"

 await call.answer(resp_msg)

@dp.message_handler(lambda c: c.data == 'weather')
 async def wea(call: types.CallbackQuery):
 weather = await client.get(city)

 resp_msg = weather.nearest_area.name + ',' + weather.nearest_area.country + '\n'
 resp_msg += f'Текущие состояние погоды: {weather.current.description}'

 await call.answer(resp_msg)

@dp.message_handler(lambda c: c.data == 'clothes')
 async def clo(call: types.CallbackQuery):
 weather = await client.get(city)

 resp_msg = weather.nearest_area.name + '\n'
 temperature = weather.current.temperature
 if temperature < -30:
    resp_msg += f'На улице {weather.current.temperature}°, одевайтесь как можно теплее!'
 elif -30 < temperature < -10:
    resp_msg += f'На улице {weather.current.temperature}°, одевайтесь очень тепло!'
 elif -10 < temperature < 0:
    resp_msg += f'На улице ниже 0, одевайтесь тепло, не забудьте про шапку'
 elif 0 > temperature > 18:
    resp_msg += f'На улице прохладно, посоветовал бы надеть легкую куртку'
 elif 18 > temperature > 30:
    resp_msg += f'На улице тепло, одевайтесь полегче'
 elif temperature > 30:
    resp_msg += f'На улице ужасно жарко: {weather.current.temperature}°, советую остаться в доме лежать под кондиционером'

 await call.answer(resp_msg)

@dp.message_handler(lambda c: c.data == 'all')
 async def all(call: types.CallbackQuery):
 weather = await client.get(city)
 temperature = weather.current.temperature
 resp_msg = weather.nearest_area.name + weather.nearest_area.country + '\n'
 resp_msg += f'Текущая температура: {weather.current.temperature}°\n'
 resp_msg += f'Текущее состояние погоды: {weather.current.description}\n\n'
 if temperature < -30:
    resp_msg += f'На улице {weather.current.temperature}°, одевайтесь как можно теплее!'
 elif -30 < temperature < -10:
    resp_msg += f'На улице {weather.current.temperature}°, одевайтесь очень тепло!'
 elif -10 < temperature < 0:
    resp_msg += f'На улице ниже 0, одевайтесь тепло, не забудьте про шапку'
 elif 0 > temperature > 18:
    resp_msg += f'На улице прохладно, посоветовал бы надеть легкую куртку'
 elif 18 > temperature > 30:
    resp_msg += f'На улице тепло, одевайтесь полегче'
elif temperature > 30:
    resp_msg += f'На улице ужасно жарко: {weather.current.temperature}°, советую остаться в доме лежать под кондиционером'

 await call.answer(resp_msg)

до ходит бот до выбора, я нажимаю на любу. из четырех кнопок и ничего не происходит, сам бот не выдает инфу, и ошибки при этом не вылетают


Ответы (1 шт):

Автор решения: Любомир

Проблема в том, что вы пытаетесь отработать callback запрос - message_handler-ом.
Вот как нужно обрабатывать Inline кнопку:

@dp.callback_query_handler(text="temp")
async def temp(call: types.CallbackQuery):
    weather = await client.get(city) 
    resp_msg = weather.nearest_area.name + ", " + weather.nearest_area.country + "\n" 
    resp_msg += f"Текущая температура: {weather.current.temperature}°"   
    await call.answer(resp_msg)

Вместо dp.message_handler() мы пишем @dp.callback_query_handler(text="callback_data которую вы указывали")

Этот вариант просто пример использования обработчиков callback

→ Ссылка