One thing nobody realizes is that a user can change his or her nickname to avoid being kicked. Here is my take on yours:
on @*:text:*:#:{
tokenize 32 $strip($1-)
if ($nick == %kick) {
kick # $v1
}
if ($nick isop #) && ($regex($1,/^!ko(n|ff)/iS)) {
if ($regml(1) == n) && ($$2 ison #) {
set %kick $2
msg # $2 next time you get talk you will be kicked
halt
}
msg # %kick you have been taken off the kick list
unset %kick
}
}
As Savage_CL has pinpointed that this script can only watch one nickname at a time, so you may want to consider using $addtok() / $istok() and $remtok() to match more than one nickname.