# some regex's I use in multiple places. our $user = qr{ \[([^\]\s][^\]]+)\] | \[\s\Qhttp://(?:www.)perlmonks.(?:org|com)/?node(?:_id)=\E([^\s;&=]+)\s\| }x; my $aggress_user = qr{(?: ([^[]\S+) | $user )}x; my $aggress = qr{ /me\s+(?:slaps?|hits?|strikes?|kicks?|throws?\b.*?\bat)\s+$aggress_user }x; #... for my $test ( [ question => qr/\?(?:\s|$)/ ], [ yell => qr/\!(?:\s|$)/ ], [ aggressor => sub { if (/$aggress/) { require URI::Escape; my $user = URI::Escape::uri_unescape($+); # make sure the user exists... $user = CBStats::UserR::fetch($user); $user && $user->nodeid() > 0; } else { return 0; } } ], [ happy => qr/(?:^|\s|\b)[:;B8]-?[)D}P>]+|[(]-?[:;](?:$|\s|\b)/ ], [ sad => qr/(?:^|\s|\b):['`]?-?\(+|[)]-?['`]?[:](?:$|\s|\b)/ ], [ thought => qr/\.oO\s*\(.*\)/ ], [ action => qr/\/me/ ], [ aggressee => sub { if (/$aggress/) { require URI::Escape; my $user = URI::Escape::uri_unescape($+); # make sure the user exists... $user = CBStats::UserR::fetch($user); $user && $user->nodeid() > 0 ? $user->nick() : ""; } else { "" } } ], [ words => sub { #require Text::ParseWords; my @x = split ' ', $_; scalar @x; } ], [ soliliquay => sub { my $prev = $self->find_where('MSGID IN (SELECT MAX(MSGID) FROM LOGS WHERE MSGID < ?)', $self->msgid()); if ($prev) { $prev->from() eq $self->from() ? ($prev->soliliquay() || 0) + 1 : 1; } else { undef } } ], ) { my ($action, $check) = @$test; if (not defined $self->$action()) { $self->$action( ref $check eq 'Regexp' ? (/$check/ ? 1 : 0) : ref $check eq 'CODE' ? $check->() : $check ); } } # Also ... karma is found via: qr/ ^$user(\+\+|\-\-) \s* \#?\s*(.*\S) /x