It's a waste of $istok engine when you use it for one word. You should strip all the tokens, not just $me, adapt the use of && operator, use the isvoice and isban check, and lastly, you should make sure the client that runs the code is opped by adding a @ prefix to the event:
alias allowednicks return USERNAME,USERNAME
on @*:text:*:#:{
tokenize 32 $strip($1-)
if ($1 == $me) && ($istok($allowednicks,$nick,44)) {
if ($istok(kick boot,$2,32)) { $iif($3 ison #,kick # $3 Blame $nick) }
elseif (ban == $2) { $iif($address($3,2) !isban #,ban # $3 2) }
elseif (voice == $2) { $iif($3 !isvoice #,mode # +v $3) }
elseif (unvoice == $2) { $iif($3 isvoice #,mode # -v $3) }
elseif (punish == $2) { $iif($3 ison #,ban -k # $3 2) }
elseif (invite == $2) { invite $3 # }
}
}
P.S. Your original code has an error. You put a curly bracket instead of the regular parenthesis for the command punish. And you misused the invite command.
Using those operators diminish the likelihood of mode flood.