+
+static int neonspam_capsscan(struct NeonSpamSettings *settings, struct ChanUser *chanuser, char *message) {
+ int caps = 0, msglen = strlen(message);
+ int i;
+ if(msglen <= 4) return SPAMSERV_CHECK_IGNORE;
+ for(i = 0; i < msglen; i++) {
+ if(isupper(message[i])) caps++;
+ }
+ caps = 100*caps/msglen;
+ if(caps >= settings->percent[SPAMSETTINGS_CAPSPERCENTINDEX]) {
+ if(!chanuser->spamnode)
+ createSpamNode(chanuser);
+ if(chanuser->spamnode->flags & NEONSPAMNODE_FLAG_CAPSSCAN_WARNED)
+ return SPAMSERV_CHECK_PUNISH;
+ else {
+ chanuser->spamnode->flags |= NEONSPAMNODE_FLAG_CAPSSCAN_WARNED;
+ return SPAMSERV_CHECK_WARN;
+ }
+ }
+ return SPAMSERV_CHECK_IGNORE;
+}
+
+static int neonspam_digitscan(struct NeonSpamSettings *settings, struct ChanUser *chanuser, char *message) {
+ int digit = 0, msglen = strlen(message);
+ int i;
+ if(msglen <= 4) return SPAMSERV_CHECK_IGNORE;
+ for(i = 0; i < msglen; i++) {
+ if(isdigit(message[i])) digit++;
+ }
+ digit = 100*digit/msglen;
+ if(digit >= settings->percent[SPAMSETTINGS_DIGITPERCENTINDEX]) {
+ if(!chanuser->spamnode)
+ createSpamNode(chanuser);
+ if(chanuser->spamnode->flags & NEONSPAMNODE_FLAG_DIGITSCAN_WARNED)
+ return SPAMSERV_CHECK_PUNISH;
+ else {
+ chanuser->spamnode->flags |= NEONSPAMNODE_FLAG_DIGITSCAN_WARNED;
+ return SPAMSERV_CHECK_WARN;
+ }
+ }
+ return SPAMSERV_CHECK_IGNORE;
+}
+