Понимаю, что по правилам нужно показать решения, которые не получаются. Но я не могу продумать логику решения и все попытки мне даже стыдно показывать. В гугле ничего не нашел.
Суть такая, есть словарь (естественно он на много записей)
dict = {
"1": {
"Name": "Roma",
"Age": "25",
"Country": "RUS",
"Tel": "123123123"
},
"2": {
"Name": "Oleg",
"Age": "23",
"Country": "BY",
"Tel": "123123123"
}
}
Запускаю FSM, логика такая - забирает возраст, забирает страну и выдает случайное имя и телефон, которое соответствует стране и возрасту. Код, как получаю это
class FSMname(StatesGroup):
age = State()
country = State()
#Стартуем FSM
@dp.message_handler(commands=['names'],state='None')
@dp.message_handler(lambda message : message.text == 'Узнать номер человека')
async def namestart(message : types.Message, state: FSMContext):
await FSMname.age.set()
await message.answer(f"Укажи возраст</b>")
#ЗАБИРАЕМ ВОЗРАСТ
@dp.message_handler(state=FSMname.age)
async def nameage(message : types.Message, state: FSMContext):
async with state.proxy() as data:
data['age'] = message.text
await FSMname.next()
await message.reply(f"Принято \n\n<b>Укажи страну</b>")
#ЗАБИРАЕМ СТРАНУ
@dp.message_handler(state=FSMname.country)
async def namecountry(message : types.Message, state: FSMContext):
async with state.proxy() as data:
data['country'] = message.text
#ПЕРЕМЕШИВАЕМ СЛОВАРЬ
items = list(dict.items())
random.shuffle(items)
#ПЕРЕБИРАЕМ И ЗАВЕРШАЕМ ЦИКЛ ПРИ ОДНОМ УСПЕШНОМ, ПИШЕМ РЕЗУЛЬТАТ ПОЛЬЗОВАТЕЛЮ
for k, v in items:
if data['age'] == v['Age']:
if data['country'] == v['Country']:
await message.answer(f"Имя:{v['Name']}, Телефон: {v['Tel']}")
break
Последнее, хочу добавить кнопку "Показать еще" и каждый раз, чтобы при нажатии на нее опять запустился цикл и выдало уже другое имя и телефон. Так сказать "бесконечная кнопка", но данные с FSMname не теряла. И не могу понять как это можно реализовать. Подскажите, в каком направлении двигаться, а то тупик, спасибо!
-------------------------------------------------ДОПОЛНЯЮ--------------------------------------------------------------
Пока в голову пришла только идея, после вывода данных, через sqlite3 или json записывать последние введенные Age и Country пользователя и по команде выводить на основании их. Но жду умных мыслей, слишком усложняю код...