Have you thought about:
on *:text:*:#: {
if ($str($chr(63),4) isin $1-) {
inc %punctuation. $+ $nick 1
if (%punctuation. $+ $nick == 1) { .msg $chan $nick Please dont excessively repeat characters. This is your First warning. }
if (%punctuation. $+ $nick == 2) { kick # $nick <kick message> }
if (%punctuation. $+ $nick == 4) { ban -ku43200 $nick <kick message> }
if (%punctuation. $+ $nick > 4) { ban -ku86400 $nick <kick message> }
}
}
This code is untested and also will NOT forget their last status. BTW, $chr(63) is mirc's $chr code for a question mark. Change it however you need to for any other punctuation. All you'd have to do really is something like this:
if (($str($chr(63),4) isin $1-) || ($str($chr(33),4) isin $1-) || ($str($chr(44),4) isin $1-)) {
Just keep adding them into the line really.
God, how many times do I need to edit this post lol