If you want to use && on the two conditions length of nick < 3 and % of uppercase in nick > 30% that makes no sense as you're really checking at best nickname of 2 character, aka either 100% or 50% which is then equivalent to checking if there's any uppercase at all. $unsafe should only be used on command which double evaluate, aka the typical /timer or /scid or /scon otherwise you'll be passing incorrect value to the alias. I'll use || which makes more sense for the condition.

Code
on *:nick:if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) && ($me isop #Alessandra) && ($newnick ison #Alessandra) badnick_alias #alessandra $newnick
For on join it is not so easy because when you join a channel, mIRC does not know the users on the channel yet. For that you must use raw 353

Code
on *:join:#:set %checknick $+ $chan 1
raw 353:*:{
  if ($($+(%,checknick,$3),2)) { 
    var %chan $3
    tokenize 32 $regsubex($regsubex($4-,^:,),/(?:[ $+ $prefix $+ ]*)([^ !]+)\S+/g,\1 $+ $chr(32))
    echo -ag $1-
    scon -r if ($len( $* ) < 3) || ($calc($regex( $* ,/[A-Z]/g) * 100 / $!len( $* )) > 30) badnick_alias $unsafe(%chan) $*
  }
}
raw 366:*:if ($($+(%,checknick,$2),2)) unset %checknick $+ $2
You may restrict this to your channel only by setting %checknick $+ $chan only if you join your specific channel.


#mircscripting @ irc.swiftirc.net == the best mIRC help channel