Your first reg /(?:[[:upper:]]{2,}\b\s?){3,}/S works only for 3 (ore more)
successive upper case words (of 2 or more letters), e.g. catching: SEE YA ALL, not catching: SEE YA @ALL, not catching: SEE - YA - ALL
I wish I could improve such regex method, but I cannot
... thus used more plain methods so far, like:
; calculate caps and caps percent (only upper letters count to caps)
var %t = $remove($strip($1-),$chr(32),!,?), %l = $len(%t), %c = $regex(%t,/[A-ZÄÖÜ]/g), %p = $round($calc(%c / %l * 100),0)
; caps by regular user; and at least 70% of text
if (($nick isreg $chan) && (%p > 70)) {
; at least 10 letters and 3 words; or 40 letters
if (((%l > 10) && ($numtok($1-,32) >= 3)) || (%l > 40)) {