when you call your alias manually, you're doing it from within the #channel window where $chan is defined either for a command typed in the editbox or launched from the nicklist or channel rightclick menus. mIRC has never defined $chan for a timer launched from :TEXT: or other similar events.
Note how the
* Timer 1 activated
* Timer 1 halted
created during your event are echoed by mIRC to the status window instead of the channel. To avoid the activated/halt message showing, use .timer instead of timer
If you want this alias to work from within the :TEXT: event, you need to pass the channel name to the alias on its command line
on *:TEXT:!test:#:{
timer1 1 3 zonahod $unsafe( $chan )
}
alias zonahod { var %a $chan | if ($1 ischan) var %a $1 | if (%a) msg %a message goes here }