Как обработать кнопки ReplyKeyboard со списком городов, чтобы при нажатии бот выдавал информацию, из словаря словарей. Aiogram
Решил попытаться самостоятельно написать телеграм-бот на питоне с помощью aiogram. Задача следующая: при старте появляется приветствие и 2 обычные кнопки (Список городов и еще одна). При нажатии на "Список..." появляется новая обычная клавиатура со списком городов:
До этого момента все самостоятельно как-то получилось. Теперь встал вопрос. У меня сделан отдельным файлом словарь городов, которые являются словарями:
cities = {
'Владивосток': {
"key1":"value1",
"key2":"value2",
"key3":"value3"
},
'Волгоград': {
"key1":"value1",
"key2":"value2",
"key3":"value3"
}, ...
Не могу понять, каким образом оформить обработку нажатий на клавиши. Получилось самым простым вариантом, когда введенное пользователем сообщение явным образом сравнивается с именем города:
@router.message(F.text.lower() == "владивосток")
async def city_values(message: Message):
for v in cities["Владивосток"].values():
await message.answer(v)
Но в этом случае мне придется кучу обработок писать, и если предположить добавление новых городов, то каждый раз придется новую обработку добавлять. Есть ли способ прогнать через цикл? Или может еще варианты, которые я не смог найти в связи с тем, что я новичок.
Ответы (1 шт):
После подсказки, подогнал решение под ответ следующим образом:
@router.message(F.text.lower())
async def city_values(message: Message):
input_text = message.text
if input_text in cities:
for v in cities[input_text].values():
await message.answer(v)
else:
await message.answer("Выберите город из списка, пожалуйста")
Возможно кто-то подскажет решение получше, буду очень благодарен!