Code:
On *:Start: {
  hmake exempt 10
  if ($isfile(exempt.hsh)) hload -i exempt exempt.hsh
}

alias isexempt { return $iif($hget(exempt,$1),$true,$false) }
alias exempt {
  if (!$hget(exempt)) hmake exempt 10
  if ($1 == -r) {
    if (!$2) echo 2 * /exempt: insufficient parameters
    elseif (!$hget(exempt,$2)) echo 3 * /exempt: $2 not in list
    else { hdel exempt $2 | echo 3 * Removed $2 from exempt list }
  }
  elseif ($1 == -l) {
    if ($hget(exempt,0) < 1) echo 2 * Exempt list empty
    else {
      echo 2 * Exempt list:
      var %x = 1
      while (%x <= $hget(exempt,0).item) {
        echo 3 $hget(exempt,%x).item
        inc %x
      }
    }
  }
  else {
    if (!$hget(exempt,$1)) { hadd exempt $1 $1 | echo 3 * Added $1 to exempt list }
    else { echo 3 * /exempt: $1 is already in list }
  }
  hsave -i exempt exempt.hsh
}

raw 319:*:{
  if (%drone != off) && (%options.exempt != on) && ($nick(#chat,$me,~&@%)) {
    if $numtok($3-,32) > 12 {
      if ($wildtok($3-,#*,$numtok($3-,32),32)) && (!$isexempt($2)) ban -ku3600 #chat $2 2 14Drone Bot - Excess Channels
    }
  }
}


The only thing I tested was the exempt list, which seems to work ok. I haven't actually tested out the Raw though. Hopefully it works.

/exempt <Nick> Adds a nickname to the exempt list.
/exempt -r <Nick> Removes a nickname from the exempt list.
/exempt -l Lists the exempt list.

It should also save the exempt list after using the command too and then reload it when mIRC starts up.