Нужно хранить базу пользователей, и для каждого пользователя хранить id, состояние и метку времени.
Состояние может быть одно из указанных:
* стартовое - пользователь ничего не сделал
* пользователю был задан вопрос
* пользователь получил роль, тогда поле времени хранит момент, когда роль была получена.
Тогда при реакции на команду или на сообщение ты ищешь ID пользователя в базе, и проверяешь, что он находится в корректном состоянии. Т.е. если реагируешь на личку, то пользователь должен быть в состоянии "задан вопрос". В нужные моменты сохраняешь в базу новое состояние, например, "задан вопрос" -> "выдана роль".
Чтобы снять роль, время от времени ищешь в базе пользователей в состоянии "выдана роль", у которых с момента выдачи прошло достаточно много времени, снимаешь им роль и записываешь в базу новое состояние (стартовое).