My Ban and Unban Script

When a user gets unbanned, and I am in a common channel with the user, I'll let him or less likely her know that he or she is unbanned. If I'm not in a common channel, I /notice.

But, when the user gets banned, they have to be in the channel in order for me to pick them up. This is based on the philosophy that, if a user is unbanned, he or she can (and shall, if want to), join immediately!

I might have to made some minor edits or arrangements.

* Nick sets mode: +b 1 person
* Nick sets mode: +b 2 people
Ban affects person 1, person 2.
* Nick sets mode: -b 1 person
-Person 1- [Script] You have been unbanned in #Channel (Nick sets mode: -b 1 person)

on *:ban:#: {
  if ($banmask == *!*@*) { /halt }
  if ($bnick) { /halt }
  var %b = 1, %bannick, %bnick
  while ($ialchan($banmask,#,%b).nick) {
    /set %bannick $+($gettok(%bannick,1,33),$chr(44),$chr(32),$gettok($v1,1,33))
    inc %b 
  }
  if ($gettok($mid(%bannick,2),0,44) == 1) { 
    /echo # Ban affects $mid(%bannick,3) $+ .
    /set %bannick $mid(%bannick,3)
    /set %bnick $+ $chan $+ %bannick $banmask
  }
  if ($gettok($mid(%bannick,2),0,44) > 1) { 
    /echo # Ban affects: $mid(%bannick,3) $+ .
    var %bn = 2
    while ($ialchan($banmask,$chan,%bn).nick) {
      /set %bnick $+ $chan $+ $ifmatch $banmask
      inc %bn
    }
  }
  while ($ial($banmask,%b).nick) {
    /set %globalbannick $+($gettok(%globalbannick,1,33),$chr(44),$chr(32),$gettok($v1,1,33))
    inc %b
  }
  if ($gettok($mid(%globalbannick,2),0,44) > 0) { 
    /echo # Ban also affects $remove($mid(%globalbannick,3),[ %bannick ]) $+ . | /unset %globalbannick
  }
}

on *:unban:#: {
  if ($banmask == *!*@*) { /halt }
  if ($bnick) { if ($bnick !ison $chan) && (. !isin $nick) { /notice $bnick [Script] You have been unbanned in $chan ( $+ $nick sets mode: -b $banmask $+ ). | /halt } }
  var %b = 1,%unbannick
  while ($ialchan($banmask,#,%b).nick) {
    /set %unbannick $+($gettok(%unbannick,1,33),$chr(44),$chr(32),$gettok($v1,1,33))
    inc %b
  }
  if ($gettok($mid(%unbannick,2),0,44) == 1) { 
    /echo # Unban affects $mid(%unbannick,3) $+ .
    if ($gettok($mid(%unbannick,2),0,44) > 1) {
      if ($istok(%UnbanAnnounce,$chan,44)) { /msg $chan Unban affects $mid(%unbannick,3) $+ . }
    }
  }
  while ($ial($banmask,%b).nick) {
    /set %globalunbannick $+($gettok(%globalunbannick,1,33),$chr(44),$chr(32),$gettok($v1,1,33))
    inc %b
  }
  var %i = 0
  while (%i <= $var($eval(% $+ bnick $+ $chan $+ *),0)) {
    inc %i
    if ($banmask == $var($eval(% $+ bnick $+ $chan $+ *),%i).value) {
      if ($mode(0).unban == 1) {
        /echo $chan Unban nick is $remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan) $+ .
         if ($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan) !ison $chan) {
          if ($comchan($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan),1)) && (!$istok(%BadChannel,$comchan($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan),1),44)) { 
            if (!%banflood) && (. !isin $nick) { /msg $comchan($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan),1) [Script] $remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan) you have been unbanned in $chan ( $+ $nick sets mode: -b $banmask $+ ) | inc -u1 %banflood | /unset $var($eval(% $+ bnick $+ $chan $+ *),%i) }
          }
          elseif (!$comchan($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan),1)) || (!$istok(%BadChannel,$comchan($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan),1),44)) {
            if (!%banflood2) && (. !isin $nick) { /notice $remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan) [Script] You have been unbanned in $chan ( $+ $nick sets mode: -b $banmask $+ ) | inc -u3 %banflood2 | /unset $var($eval(% $+ bnick $+ $chan $+ *),%i) }
          }
        }
        if ($remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan) ison $chan) {
          /unset $var($eval(% $+ bnick $+ $chan $+ *),%i)
        }
      }
      elseif ($mode(0).unban > 1) { 
        /set %cumulativelist $addtok(%cumulativelist,$remove($var($eval(% $+ bnick $+ $chan $+ *),%i),$chr(37),bnick,$chan),32)
        /.timerUnbanEffect 1 2 /DisplayUnbanEffect $!decode($encode($chan,m),m)
      }
    }
    /unset $var($eval(% $+ bnick $+ $chan $+ *),%i)
  }
  if ($gettok($mid(%globalunbannick,2),0,44) > 0) {
    /echo # Unban also affects $remove($mid(%globalunbannick,3),[ %unbannick ]) $+ .
    if ($gettok($mid(%globalunbannick,2),0,44) > 1) {
      if ($istok(%UnbanAnnounce,$chan,44)) { /msg $chan Unban also affects $remove($mid(%globalunbannick,3),[ %unbannick ]) $+ . 
      } 
    }
    /unset %globalunbannick
  }
}

alias DisplayUnbanEffect {
  if ($istok(%UnbanAnnounce,$1,44)) { /msg $1 Unban affects %cumulativelist $+ . }
  if ($gettok(%cumulativelist,0,32) > 1) {
    var %i = 0
    while (%i <= $calc($gettok(%cumulativelist,0,32)) -2) {
      inc %i
      if ($gettok(%cumulativelist,%i,32) !ison $1) { /timernotice $+ %i 1 %i /notice $gettok(%cumulativelist,%i,32) [Script] You were unbanned in $1 }
    }
  }
  /unset %cumulativelist
}