diff options
| author | Tom Feist <shabble@cowu.be> | 2010-08-21 21:55:33 +0000 | 
|---|---|---|
| committer | Tom Feist <shabble@cowu.be> | 2010-08-21 21:55:33 +0000 | 
| commit | 546b896dc20186abe42834e67308b30c1f601b20 (patch) | |
| tree | 4ce7de5125ad9fd52067d4fce6bad1a3d45161fa | |
| parent | added first attempt at a patch for creating bindings accessor. Currently live... (diff) | |
| download | irssi-scripts-546b896dc20186abe42834e67308b30c1f601b20.tar.gz irssi-scripts-546b896dc20186abe42834e67308b30c1f601b20.zip | |
added masshilight on requset form bikcmp - modified original to support configurable actions when flood detected
| -rw-r--r-- | masshilight/masshilight.pl | 111 | 
1 files changed, 111 insertions, 0 deletions
| diff --git a/masshilight/masshilight.pl b/masshilight/masshilight.pl new file mode 100644 index 0000000..cbd2bda --- /dev/null +++ b/masshilight/masshilight.pl @@ -0,0 +1,111 @@ +# disable hilighting of mass-hilights +# (messages which contain a lot of nicknames) +# +# DESCRIPTION +# sometimes a jester annoys a channel with a message +# containing a lot of nicks that are in that channel. +# this script prevents hilighting of a window in this +# case. number of nicks in the message is user +# configurable in the variable mass_highlight_threshold. +# +# CHANGELOG +# * 01.05.2004 +# fixed problems with nicks containing brackets +# added comments, description and this changelog :) +# * 30.05.2004 +# first version of the script +# * 21.08.2010 +# modified it a lot to work with pubmessages so it has access to +# the sender and channel more easily. Also added configurable actions +# to take when flooding is detected. + +use Irssi; +use strict; +use warnings; + +use vars qw($VERSION %IRSSI); + +$VERSION = "0.2"; +%IRSSI = ( +    authors         => "Uli Baumann, Tom Feist", +    contact         => 'f-zappa@irc-muenster.de, shabble+irssi@metavore.org', +    name            => "mass_hilight_action", +    description     => "Customisable command on messages containing a lot of nicknames", +    license         => "GPL", +    changed         => "Sat 21 Aug 2010 22:29:22 BST", +); + +sub sig_msg_pub { +    my ($server, $msg, $nick, $address, $target) = @_; + +    my $num_nicks= -1;                    # don't count target's nick +    my $max_num_nicks +      = Irssi::settings_get_int('mass_hilight_threshold'); + +    my $channel =  $server->channel_find($target); + +    foreach my $nick ($channel->nicks()) { +        $nick = $nick->{nick}; +        $nick =~ s/([\]\[])/\\$1/g;   # ']' and '[' need masking + +        $num_nicks++ if ($msg =~ /\Q$nick\E/); +    } + +    if ($num_nicks >= $max_num_nicks) { +        my $action_val = Irssi::settings_get_str('mass_hilight_action'); +        my @actions = split /\s*;\s*/, $action_val; +        foreach my $action (@actions) { +            if ($action =~ m/suppress/i) { +                Irssi::signal_stop(); # don't display it at all. +            } elsif ($action =~ m/kick/) { +                $server->command("/KICK $target $nick"); +            } else { +                $action =~ s/\$nick/$nick/; +                $action =~ s/\$chan/$target/; +                $action =~ s/\$host/$address/; + +                $server->command($action); +            } +        } +    } +} + +# tell irssi to use this and initialize variable if necessary + +Irssi::signal_add_first('message public', \&sig_msg_pub); +Irssi::settings_add_int('misc','mass_hilight_threshold', 3); +Irssi::settings_add_str('misc', 'mass_hilight_action', 'suppress'); + +# Irssi::command_bind('testmasshilight', sub { my $args = shift; +#                                              sig_msg_pub(Irssi::active_server(), +#                                                          $args, +#                                                          "bob", +#                                                          "bob!bob\@bob.bob", +#                                                          "#jfkdalfad"); +#                                              }); + + +__END__ + +Usage: + +use /set mass_hilight_threshold to set how many matching nicks from the current + are required to trigger the hilight flood detection. + +use /set mass_hilight_action to configure what happens when they do.  You can specify +multiple actions, separated by ; (semicolons) + +Two special actions exist: 'suppress', which prevents the message from being +displayed to you at all, and 'kick', which expands to the action '/kick #channel +$nick'. + +Any other actions you wish to take are processed as regular Irssi commands, but +the following variables are replaced: + +$nick - becomes the nick of the person who triggered this script +$chan - the channel in which it happened +$host - the hostmask of the offender + +For example: + +/set mass_hilight_action /echo hilight flooding by: $nick ; /kickban $chan $nick "Hilight flooding is not permitted here." | 
