well this wont do it on only one letter, but go ahead and test this
It checks if its a letter (not 0-9 or punctuation) and then checks if it is upper case or not
if it is not a letter (it IS 0-9 or punctuation) it decreases a var so that var can be used to get a % of letters that are caps and not include the nonalpha characters.
Code:
on *:text:*:#:{
  var %text = $1-
  var %count = $len(%text)
  var %onlyletters = $len(%text)
  var %i = 1, %place, %upper, %lower
  while (%i <= %count) {
    var %place = $mid(%text,%i,1)
    if (%place isalpha) {
      if (%place isupper) { inc %upper }
    }
    if (%place !isalpha) { dec %onlyletters }
    inc %i
  }
  var %check = $calc((%upper / %onlyletters) * 100)
  if ( %check > 30) { echo $chan $nick might be talking in all caps -= From %count Characters: %upper of %onlyletters Letters are Upper Case =- } 
}

the if ( %check > 30) is what you would need to change to set what you think would be the right value.
but 30% caps seems high to me in Normal conversation.