Как сделать так, чтобы бот продолжал скидывать картинки, пока пользователь не ошибется в угадывании содержимого на картинке
Возникла проблема с ботом
@dp.message_handler(Text(equals="Animal quiz game"))
async def game(message: types.Message):
animals = ['cat.png',
'dog.png',
'turtle.png',
'rabbit.png',
'cow.png',
'parrot.png',
'camel.png',
'giraffe.png',
'monkey.png',
'mouse.png',
]
count = 0
await bot.send_photo(message.chat.id, random.choice(animals))
Бот отправляет рандомную картинку из массива. Хочу сделать так, чтобы бот продолжал скидывать картинки до того, пока пользователь не ошибется (например вместо "корова" написал "кошка"). Потом посчитать сколько правильных ответов он отгадал и вывести результат.
Ответы (1 шт):
Автор решения: biflé
→ Ссылка
Я бы сделал это через Inline-кнопки. Например, так:
@dp.message_handler(commands=['animalguess'])
async def guess(message: types.Message):
animallist=['cat','dog','rat'] #лист всех животных
keyboard={'inline_keyboard':[]} #пустая клавиатура
animal=random.choice(animallist) #выбираем животное
for i in animallist: #создаем клавиатуру
keyboard['inline_keyboard'].append(
[{'text':i,'callback_data':f'game_{i}_{animal}')
#i - элемент списка, animal - животное на фото (понадобится позже)
await bot.send_photo(
message.from_user.id, types.InputFile(animal+'.png'), reply_markup=keyboard)
@dp.callback_query_handler(text_startswith='game_')
async def call_guess(call: types.CallbackQuery):
data=call.data.split('_') #считываем информацию с кнопки
if data[1]!=data[2]: #проверка, угадал ли пользователь
await call.answer('Вы не угадали, попробуйте еще раз!', True)
return
animallist=['cat','dog','rat']
keyboard={'inline_keyboard':[]}
animal=random.choice(animallist)
for i in animallist:
keyboard['inline_keyboard'].append(
[{'text':i,'callback_data':f'game_{i}_{animal}')
await call.message.delete()
await bot.send_photo(
call.message.chat.id, types.InputFile(animal+'.png'), reply_markup=keyboard)
Обратите внимание, нужно будет импортировать types
from aiogram import types