I apologize that mine doesn't work, I (obviously) thought it would, as it uses the nick and ident information returned by the /who command.

In regards to the code you posted, there are some coding errors.
Here's a re-write of your code, with detected coding errors corrected, and condensed.
Code:
alias badtxt return $+(",$scriptdirbadword.txt,")
alias badchan { if ($1 isin $bad($2).type) || (!$bad($2).type) { return $true } }
alias bad {
  if ($1) {
    var %s = 1, %lines = $lines($badtxt)
    while (%s <= %lines) {
      var %line = $read($badtxt,%s)
      if ($gettok(%line,1,44) iswm $1) {
        return $iif($prop == type,$gettok(%line,2-,44),$v1)
        inc %s   
      }
    }
  }
}
on @*:join:#:{
  if ($bad($fulladdress)) && ($badchan(#,$fulladdress)) {
    kick # $nick Bad Nick/Ident
  }
}