$1- is undefined in sockets. If the data you're looking at is in %msn.chat.data you can tokenize 32 %msn.chat.data to use $1- as you're used to. Furthermore, if the data is contained in this variable, your condition if (%msn.chat.data == !say) will be false, use if (!say * iswm %msn.chat.data).

Passing unknown text to a timer is unsafe, use this alias and $safe($1-) in the timer.

Code:
alias safe return $!decode( $encode($1,m) ,m)