User:Mike.lifeguard/stalkwords.pl

From Meta, a Wikimedia project coordination wiki
Jump to: navigation, search
use strict;
use warnings;
use Xchat qw( :all );
 
my $name = 'Regex stalkwords';
my $version = '1.1';
my $description = 'Regex stalkwords';
 
Xchat::register($name, $version, $description);
Xchat::print("Loading $name $version: $description");
 
foreach ('Channel Message', 'Channel Action') {
        hook_print($_, \&channel_highlight, {priority => PRI_HIGHEST, data => $_});
}
 
my $highlight = qr/\b(?:one|two|three)\b/i; # These are normal-ish stalkwords
my $stalkwords = qr/!(four|five|six)\b/i;   # For !admin@mywiki or whatever
 
sub channel_highlight {
        if (defined get_info('away')) {return EAT_NONE;} # Don't highlight if we're away
        my $event = $_[1];
        my $nick = $_[0][0];
 
        my $msg = ($_[0][1] ? strip_code($_[0][1]) : '');       # We override colours etc because it's a highlight (and that can mess up matching)
                                                                # If $_[0][1] is undefined, use a zero-length string for safety
        $_[0][1] = ($_[0][1] ? strip_code($_[0][1]) : '');      # We also want to strip it from the value in the array, for display purposes
        if (get_prefs('irc_no_hilight') ne ''){
                my $ignored = '(?:' . get_prefs('irc_no_hilight') . ')'; # Grabs your pref for who not to highlight, and excludes them
                $ignored =~ s/,/\|/g;
                $ignored = qr/$ignored/;
 
                if (($nick !~ m/$ignored/) and (($msg =~ $highlight) || ($msg =~ $stalkwords))) {
                        if ($event eq 'Channel Message') {$event = 'Channel Msg Hilight';}
                        else {$event = 'Channel Action Hilight';}
 
                        emit_print($event, @{$_[0]});
                        command('gui color 3'); # Change the tab colour
                        return EAT_XCHAT;
                }
                return EAT_NONE;
        }
        else {
                if (($msg =~ $highlight) || ($msg =~ $stalkwords)) {
                        if ($event eq 'Channel Message') {$event = 'Channel Msg Hilight';}
                        else {$event = 'Channel Action Hilight';}
 
                        emit_print($event, @{$_[0]});
                        command('gui color 3'); # Change the tab colour
                        return EAT_XCHAT;
                }
                return EAT_NONE;
        }
}