See? Isn't it easier to communicate to other people when we're polite?
You can simply change:
Code:
on !1:join:#chan1,#chan2:{
  var %x = $hget(welcomed. $+ $chan,0).item
  while (%x) {
    if ($hget(welcomed. $+ $chan,%x).item iswm $fulladdress) {
      return
    }
    dec %x
  }
  hadd -mu1800 welcomed. $+ $chan $wildsite
  .notice $nick Welcome to $+($chan,!)
}

to:
Code:
on !1:join:#chan1,#chan2:{
  var %x = $hget(welcomed. $+ $chan,0).item
  while (%x) {
    if ($hget(welcomed. $+ $chan,%x).item iswm $fulladdress) {
      return
    }
    dec %x
  }
  hadd -mu1800 welcomed. $+ $chan $gettok($address($nick,0),1,64) $+ @*
  .notice $nick Welcome to $+($chan,!)
}

Then, if you want to save the data, you can use (will keep data intact after you restart the bot):
Code:
on !1:join:#chan1,#chan2:{
  if (($hget(welcomed. $+ $chan) == $null) && ($isfile($scriptdirjoinsg.hsh)) {
    hload -bi welcomed. $+ $chan $qt($scriptdirjoinmsg.hsh) $chan
  }
  var %x = $hget(welcomed. $+ $chan,0).item
  while (%x) {
    if ($hget(welcomed. $+ $chan,%x).item iswm $fulladdress) {
      return
    }
    dec %x
  }
  hadd -mu1800 welcomed. $+ $chan $gettok($address($nick,0),1,64) $+ @*
  hsave -bi welcomed. $+ $chan $qt($scriptdirjoinmsg.hsh) $chan
  .notice $nick Welcome to $+($chan,!)
}

You can remove the "u1800" (1800 seconds until the join message can be sent again), if you want the message to be sent only once.