Условие выполняется по двойному нажатию кнопки в клавиатуре

Делаю бота на python aiogram, столкнулся с проблемой. Сейчас во втором состоянии Task.problem условие if отрабатывается при двойном нажатии на кнопку (Интернет/Замки), как можно сделать так чтобы условие с первого раза создавало новое состояние Task.lock.set() или Task.internet.set()

import logging

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.utils import executor

logging.basicConfig(level=logging.INFO)

API_TOKEN = 'ключ'

bot = Bot(token=API_TOKEN)
number_task = 0
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)



class Task(StatesGroup):
    problem = State()
    choose_problem = State()
    internet = State()
    lock = State()


@dp.message_handler(commands='start')
async def bot_start(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add("Первый выбор", "Второй выбор")
    await Task.problem.set()

    await message.answer("Выберите:", reply_markup=markup)


@dp.message_handler(state=Task.problem)
async def process_name(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add("Интернет", "Замки")
    if message.text == "Интернет":
        await Task.internet.set()
    elif message.text == "Замки":
        await Task.lock.set()
    await message.answer("Что случилось", reply_markup=markup)


@dp.message_handler(text="Замки", state=Task.lock)
async def without_puree(message: types.Message):

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)


@dp.message_handler(text="Интернет", state=Task.internet)
async def without_puree(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

Ответы (1 шт):

Автор решения: oleksandrigo

Где-то вот так. А вообще рекомендую использовать инлайн кнопки, вместо обычных. С ними можно обойтись даже без машины состояний.

class Task(StatesGroup):
    problem = State()
    choose_problem = State()
    kakoito_next_state = State()


@dp.message_handler(state=Task.problem)
async def process_name(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add("Интернет", "Замки")
    await message.answer("Что случилось", reply_markup=markup)
    await Task.choose_problem.set()

@dp.message_handler(text="Замки", state=Task.choose_problem)
async def without_puree(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)


@dp.message_handler(text="Интернет", state=Task.choose_problem)
async def without_puree(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)
→ Ссылка