Ожидание ответа от пользователя Aiogram. TimeOut
@dp.message_handler(content_types=types.ContentTypes.NEW_CHAT_MEMBERS)
async def new_chat_member(message: types.Message, state: FSMContext):
global text, new_member
text = '1234'
new_member = message.new_chat_members[0]
data = image.generate(text)
await message.answer_photo(photo=data)
await Form.captcha.set()
@dp.message_handler(state=Form.captcha)
async def process_captcha_check(message: types.Message, state: FSMContext):
if message.text == text:
await state.update_data(captcha_message = True)
await message.answer("Ты умный, капчу разгадал")
await state.finish()
При входе юзера в чат бот отсылает ему картинку с каптчей. Тут же идёт переход в другое состояние где ожидается отправка капчи. Как сделать так, что если в течении 30 секунд нет ответа от пользователя, бот кикает его с чата?
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Штош. Лучше поздно, чем никогда.
class Form(StatesGroup):
captcha = State()
@dp.message_handler()
async def new_chat_member(message: types.Message, state: FSMContext):
global text, new_member
text = '1234'
new_member = message.new_chat_members[0]
data = image.generate(text)
await message.answer_photo(photo=data)
await Form.captcha.set()
# Ждем 30 сек. Потом проверяем менялся ли стейт. Если да то ничего не происходит.
# Если стейт тот же значит юзер не перешёл в хендлер ниже
await asyncio.sleep(30)
if await state.get_state() == "Form:captcha":
# так как вы просили просто кик, то после бана сразу же разбан
# ибо чистого кика нету
await bot.ban_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
await bot.unban_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
@dp.message_handler(state=Form.captcha)
async def process_captcha_check(message: types.Message, state: FSMContext):
if message.text == text:
await state.update_data(captcha_message=True)
await message.answer("Ты умный, капчу разгадал")
await state.finish()