В обработчике команды:
1. Делаешь хранилище, словарь-dict с ключом вида (message id, user id) и значением в виде объектов
asyncio.Event.
2. Когда отправляешь сообщение для реакции, помещаешь в хранилище пару (id сообщения, id адресата), а значением задаешь новый asyncio.Event().
3. С помощью
asyncio.wait_for() и Event.wait() ждешь срабатываения этого объекта Event или желаемого таймаута.
4. Если объект сработал и функция wait_for() вернула значение, то реакция была. Действуешь соответственно.
5. Если wait_for() выбросила asyncio.TimeoutError, то произошел таймаут. Действуешь соответственно.
В обоих случаях удаляешь из хранилища ключ (id сообщения, id адресата)
Что касается реакции, то тебе нужно событие
on_raw_reaction_add() и ассоциированный с ним объект класса
RawReactionActionEvent. Оттуда можно достать сведения о пользователе, сообщении и эмодзи. Ищешь в хранилище пару (id сообщения, id пользователя), если нашел - значит, это одно из наших специальных сообщений. В обработчике этого события выбираешь соответствующей этой паре объект asyncio.Event и дергаешь его метод set(), чтобы просигналить вышеприведенному алгоритму (он тогда пойдёт по ветке 4). Иначе не делаешь ничего.