Добавила викторину в Telegram bot, бот доходит до неё, выводит первый вопрос и при выборе ответа вылетает ошибка: TypeError: poll_answer() missing 2 required positional arguments: ‘state’ and ‘message’
Хотя эти аргументы есть в этой функции. Помогите! Если меняю аргументы местами, то в ошибке будут 2 других аргумента (без первого).
Правильный ответ храню в машине состояний и передаю для сравнения с выбором пользователя в следующий хэндлер.
Заранее ОГРОМНОЕ спасибо за ответ!
@dp.message_handler(state = Profile.subscribe)
async def poll(message: types.Message, state: FSMContext):
correct =0#индекс правильного ответа
#отправляем вопрос
await bot.send_poll(message.chat.id, 'В1', ['o1p', 'o2', 'o3', 'o4'], type="regular", correct_option_id=correct, is_anonymous=False)
await state.update_data(test1 = correct)#сохраняем индекс правильного ответа в state
await Profile.next()
@dp.poll_answer_handler()
async def poll_answer(message: types.Message, quiz_answer: types.PollAnswer, state : FSMContext):
data = await state.get_data()
# проверяем ответ
if quiz_answer.option_ids[0] == data['test1']:#сравниваем ответ пользователя с правильным
await bot.send_message(quiz_answer.user.id, 'Отлично! Идём дальше')
correct = 1
# отправляем следующий вопрос
await bot.send_poll(message.chat.id, 'В2', ['о1', 'о2p', 'о3', 'о4'], type="regular", correct_option_id=correct, is_anonymous=False)
await state.update_data(test2 = correct)
await Profile.next()
else:
await bot.send_message(quiz_answer.user.id, 'Жаль, но это неправильный ответ.')
@dp.poll_answer_handler()
async def poll_answer(message: types.Message, quiz_answer: types.PollAnswer, state: FSMContext):
data = await state.get_data()
# проверяем ответ
if quiz_answer.option_ids[0] == data['test2']:
correct = 2
await bot.send_message(quiz_answer.user.id, 'Правильно! Идём дальше')
# отправляем следующий вопрос
await bot.send_poll(message.chat.id, 'В3', ['о1', 'о2', 'о3p', 'о4'], type="regular", correct_option_id=correct, is_anonymous=False)
await state.update_data(test3 = correct)
await Profile.next()
else:
await bot.send_message(quiz_answer.user.id, 'Ответ неверный. Попробуй ещё раз.')
@dp.poll_answer_handler()
async def poll_answer(message: types.Message, quiz_answer: types.PollAnswer, state: FSMContext):
data = await state.get_data()
# проверяем ответ
if quiz_answer.option_ids[0]== data['test3']:
await bot.send_message(quiz_answer.user.id, 'Супер!')
await state.finish()
else:
await bot.send_message(quiz_answer.user.id, 'Неверно, давай ещё разок)')
ОБНОВЛЁННЫЙ КОД:
@dp.message_handler(Profile.subscribe)
async def poll(message: types.Message, state: FSMContext):
correct =0#индекс правильного ответа
#отправляем вопрос
await bot.send_poll(message.chat.id, 'В1', ['o1p', 'o2', 'o3', 'o4'], type="regular", correct_option_id=correct, is_anonymous=False)
await state.set_state(Profile.test1)
await state.update_data(test1 = correct)#сохраняем индекс правильного ответа в state
@dp.poll_answer_handler(Profile.test1)
async def poll_answer(message: types.Message, quiz_answer: types.PollAnswer, state : FSMContext):
data = await state.get_data()
# проверяем ответ
if quiz_answer.option_ids[0] == data['test1']:#сравниваем ответ пользователя с правильным
await bot.send_message(quiz_answer.user.id, 'Отлично! Идём дальше')
correct = 1
# отправляем следующий вопрос
await bot.send_poll(message.chat.id, 'В2', ['о1', 'о2p', 'о3', 'о4'], type="regular", correct_option_id=correct, is_anonymous=False)
await state.set_state(Profile.test2)
await state.update_data(test2 = correct)
else:
await bot.send_message(quiz_answer.user.id, 'Жаль, но это неправильный ответ.')
@dp.poll_answer_handler(Profile.test2)
async def poll_answer(message: types.Message, quiz_answer: types.PollAnswer, state: FSMContext):
data = await state.get_data()
# проверяем ответ
if quiz_answer.option_ids[0] == data['test2']:
correct = 2
await bot.send_message(quiz_answer.user.id, 'Правильно! Идём дальше')
# отправляем следующий вопрос
await bot.send_poll(message.chat.id, 'В3', ['о1', 'о2', 'о3p', 'о4'], type="regular", correct_option_id=correct, is_anonymous=False)
await state.set_state(Profile.test3)
await state.update_data(test3 = correct)
else:
await bot.send_message(quiz_answer.user.id, 'Ответ неверный. Попробуй ещё раз.')
@dp.poll_answer_handler(Profile.test3)
async def poll_answer(message: types.Message, quiz_answer: types.PollAnswer, state: FSMContext):
data = await state.get_data()
# проверяем ответ
if quiz_answer.option_ids[0]== data['test3']:
await bot.send_message(quiz_answer.user.id, 'Супер!')
await state.finish()
else:
await bot.send_message(quiz_answer.user.id, 'Неверно, давай ещё разок)')
ОШИБКА
raceback (most recent call last):
File "/Users/maksimklimencuk/Downloads/astro/astro.py", line 61, in <module>
async def start_chat(message: types.Message, state: FSMContext):
File "/Users/maksimklimencuk/Library/Python/3.9/lib/python/site-packages/aiogram/dispatcher/dispatcher.py", line 560, in decorator
self.register_message_handler(callback, *custom_filters,
File "/Users/maksimklimencuk/Library/Python/3.9/lib/python/site-packages/aiogram/dispatcher/dispatcher.py", line 486, in register_message_handler
self.message_handlers.register(self._wrap_async_task(callback, run_task), filters_set)
File "/Users/maksimklimencuk/Library/Python/3.9/lib/python/site-packages/aiogram/dispatcher/handler.py", line 62, in register
filters = get_filters_spec(self.dispatcher, filters)
File "/Users/maksimklimencuk/Library/Python/3.9/lib/python/site-packages/aiogram/dispatcher/filters/filters.py", line 48, in get_filters_spec
data.append(get_filter_spec(dispatcher, i))
File "/Users/maksimklimencuk/Library/Python/3.9/lib/python/site-packages/aiogram/dispatcher/filters/filters.py", line 28, in get_filter_spec
raise TypeError('Filter must be callable and/or awaitable!')
TypeError: Filter must be callable and/or awaitable!
Ругается вот на это место (satrt_chat):
@dp.message_handler(commands="start")
async def send_welcome(message: types.Message, state: FSMContext):
await bot.send_message(chat_id=message.chat.id, text="Добро пожаловать! Представьтесь)", reply_markup=types.ReplyKeyboardRemove())
await state.set_state(Profile.name)
@dp.message_handler(Profile.name)
async def start_chat(message: types.Message, state: FSMContext):
name = message.text
await state.update_data(profile_name=name)
await bot.send_message(chat_id=message.chat.id, text=f'Приятно познакомиться, {name}!\n' f'Введите свою почту, а я отправлю🎁!')
await state.set_state(Profile.mail)