We'll need good documentation for the messeger::say method.
It looks like the say method returns immediately, meaning the subsequent code is executed right away. So if you want to wait until the message has disappeared or been dismissed, you need to make a new state and pass self in order to get cued to change to the next state.
The messager (actually the Talker) messes with enabling/disabling the icon bar when it's shown/hidden, so that probably conflicted with you changing handson while it was up.