ive tested this and it all works for me

Note: ive used a stacked nicks in the on op event if your networks allows stacked kicks and modes kick #channel nick,nick,nick,nick,nick,nick
not sure on what network you are gonna use this as some networks allow stacked kicks.

Code


ON *:nick:{
  haltdef
  var %whloop = 1
  while ( $comchan($newnick,%whloop) != $null )  {
    var %chan $v1
    if (!$nick(%chan,$newnick,@&~%) && $nick(%chan,$me,@&~%)) { badnick_alias %chan $newnick  }
    inc %whloop
  }
  halt
}


ON *:op:#:{
  if ($opnick == $me) {
    var %loop = 1, %nick , %kickmsg = please change your nick thanks you.... 
    while (%loop <= $nick($chan,0)) {
      %nick = $nick($chan,%loop)
      if ($len( %nick ) < 3 || ($calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 30)) { 
        if (!$nick( %chan , %nick ,~&@%)) { var %kick = $addtok(%kick,%nick,44) }
        if ($numtok(%kick,44) == 4) { kick $chan %kick %kickmsg | unset %kick }      
      }  
      inc %loop 1
    }
  }
  if (%kick) { kick $chan %kick %kickmsg }
}


on !*:JOIN:#test:{
  if (!$Timer($+(CheckNicks,.,$network,.,$chan,.,$nick))) {   .Timer $+ $+(CheckNicks,.,$network,.,$chan,.,$nick)  -md 1 750 badnick_alias $unsafe($chan) $nick  } 
}

alias badnick_alias {
  var %chan $1 , %nick $2
  if (%nick !ison %chan || $nick( %chan , %nick ,@&~%)) { halt }
  if ($len( %nick ) < 3 || ($calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 30)) { kick %chan %nick please change your nick thanks you.... }  
}