To get the code from billythekid to work as you're wanting, you need to put the timer command into an on connect event
Code:
 on *:connect: .timerdisco 1 120 server  


Per your second request (aka your preference) change your greet_user alias to the following

Code:
 alias greet_user {
  if ($1) {
    var %chan = $1, %nick = $2
    if (!$timer(greet_user)) .timergreet_user 1 0 /msg %nick Welcome!!! $chr(124) greet_user
    else set %greet.user $addtok(%greet.user,$+(%chan,:,%nick),32)
  }
  elseif %greet.user {
    var %next = $gettok(%greet.user,1,32), %chan = $gettok(%next,1,58), %nick = $gettok(%next,2,58)
    if ($gettok(%greet.user,2-,32)) set %greet.user $v1
    else unset %greet.user
    inc %greet
    .timergreet_user 1 0 msg %nick Welcome!!! $chr(124) greet_user
    if %greet > 40 {
      unset %greet
      .timerdisco 1 10 server
    }
  } 
}
 


I noticed that you were missing a } in the alias, not sure if it's missing in your code, or if it got missed in a copy & paste.
The missing } has been put in place in the above code.