The following code is meant to check for blacklisted addresses when I join a channel and get opped. It works great when I get opped with a "@" prefix (mode +o) but it does not work when I get opped with a "!" prefix (mode +a).

It works fine if I run manually after I join ( /bh.opscan) with either nick prefix, so I tried putting it on a timer. Still won't work.

Any suggestions are appreciated.

Code:
on *:rawmode:%bh.chan: { 
  if ((($1 == +a) || ($1 == +o)) && ($2 == $me)) {
    if ($hget(blackhash, bh.autoscan) == 1) { bh.opscan }
  }
}


alias bh.opscan {
  var %chan = $chan, %num = 0, %checked = 0, %y = $nick(%chan,0,a,!@)
  echo -a 10,1 BlackHash is scanning for blacklisted users in8 %chan $+ 10... 
  while %y {
    var %bl.taddress = $address($nick(%chan,%y,a,!@),5)
    if $hfind(blacklist, %bl.taddress, 1, W) {
      var %bl.address = $hfind(blacklist, %bl.taddress, 1, W), %bl.reason = $gettok($hget(blacklist, %bl.address),1,59)
      if ($gettok($hget(blacklist, %bl.address),2,59) == $null) {
        echo $chan 4,1 Blacklisted user, kickbanning... 
        ban -u $+ $hget(blackhash, bl.secs) $chan %bl.address | kick %chan $nick(%chan,%y,a,!@) %bl.reason
        if ($hget(blackhash, bl.ignore) == 1) { /.ignore -u $+ $hget(blackhash, bl.secs) %bl.address }
      }
      else {
        var %z = $gettok($hget(blacklist, %bl.address),2,59)
        if $istok(%z,%chan,44) { 
          ban -u $+ $hget(blackhash, bl.secs) $chan %bl.address | kick %chan $nick(%chan,%y,a,!@) %bl.reason
          if ($hget(blackhash, bl.ignore) == 1) { /.ignore -u $+ $hget(blackhash, bl.secs) %bl.address }
        }
      }
      inc %num
    }
    dec %y | inc %checked
  }
  echo -a 10,1 Checked9 %checked 10users, found9 %num 
}