diff options
| author | Nico R. Wohlgemuth | 2014-09-07 12:13:09 +0200 |
|---|---|---|
| committer | Nico R. Wohlgemuth | 2014-09-07 12:13:09 +0200 |
| commit | b81e80975d35cd85a8ff34f5d2366b9bc8969c1b (patch) | |
| tree | 7353bd9d71aed17bc2470308c8f4909f439c743d | |
| parent | 1777b5bab4b92f6eebd7269c2657ac824b61b067 (diff) | |
| download | scripts.irssi.org-b81e80975d35cd85a8ff34f5d2366b9bc8969c1b.tar.bz2 | |
Add greetignore.pl
| -rw-r--r-- | _data/scripts.yaml | 10 | ||||
| -rw-r--r-- | scripts/greetignore.pl | 103 |
2 files changed, 113 insertions, 0 deletions
diff --git a/_data/scripts.yaml b/_data/scripts.yaml index 9c6d05f..0db86e1 100644 --- a/_data/scripts.yaml +++ b/_data/scripts.yaml @@ -1641,6 +1641,16 @@ url: "http://www.freaknet.org/~pallotron" version: "0.1.2" +- authors: "David O'Rourke, Nico R. Wohlgemuth" + changed: "2012-09-14" + contact: "nico@lifeisabug.com" + description: "Hide the stupid \"greet messages\" posted by some bots after someone joins a channel." + filename: "greetignore.pl" + modified: "2014-09-07 12:10" + license: "GPLv2" + name: "greetignore" + version: "1.1" + - authors: "Timo cras Sirainen, Wouter Coekaerts" changed: "2008-01-13" contact: "tss@iki.fi, wouter@coekaerts.be," diff --git a/scripts/greetignore.pl b/scripts/greetignore.pl new file mode 100644 index 0000000..69f3920 --- /dev/null +++ b/scripts/greetignore.pl @@ -0,0 +1,103 @@ +# greetignore.pl +# Gets rid of annoying "greet messages". +##### +# >>> Nick!ident@hos.t has joined #channel +# <IdiotBot> [Nick] This is a shitty greet message. +# <nico> Sigh, I wish I just could ignore those... +##### +# With this script: +##### +# >>> Nick!ident@hos.t has joined #channel +# <nico> Way better. +##### +# It does this by remembering people who joined a channel for 1 second and +# ignoring any messages matching /^[$nick] / in this timeframe. +##### +# Settings: +# greetignore_networks (default: Rizon) +# - Set the network tags which this script should be looking at. + +# Shamelessly edited David 'phyber' O'Rourke's quakequit.pl. +# Most credits to him :p + +use strict; +use Irssi; +use vars qw($VERSION %IRSSI); +$VERSION = "1.1"; +%IRSSI = ( + authors => "David O\'Rourke, Nico R. Wohlgemuth", + contact => "nico\@lifeisabug.com", + name => "greetignore", + description => "Hide the stupid \"greet messages\" posted by some bots". + " after someone joins a channel.", + licence => "GPLv2", + changed => "20120914", +); + +# Output a few extra messages to the status window to help with +# any errors that might happen. +my $debug = 0; +# Array to store our temporary joins in. +my %joins; + +# Return 1 if we should process the tag, otherwise 0. +sub process_tag { + my ($tag) = @_; + my $netlist = Irssi::settings_get_str('greetignore_networks'); + foreach my $network (split /[, ]/, $netlist) { + if (lc $tag eq lc $network) { + return 1; + } + } + return 0; +} + +# Remove entries from the joins hash. +sub purge_nick { + my ($data) = @_; + my @tagnick = split /:/, $data; + delete $joins{$tagnick[0]}{$tagnick[1]}; + return 0; +} + +# Ignore lines like "<SomeBot> [$nick] This is a shitty greet message." +sub ignore_greet { + my ($server_rec, $msg, $nick, $addr, $target) = @_; + my $tag = $server_rec->{tag}; + # Don't proceed if the hash is empty. + # hash returns <elements>/<buckets> in scalar context and just 0 if it's empty. + if (!$joins{$tag} || !(keys(%{$joins{$tag}}))) { + return 0; + } + # Return if we don't care about this tag. + if (process_tag($tag) == 0) { + return 0; + } + # If the message matches a nick in our joins hash, don't show the greet message. + if ($msg =~ /^\[(.+?)\] / && $joins{$tag}{lc($1)} && $nick ne $1) { + Irssi::signal_stop(); + Irssi::print("Ignored: <$nick> $msg") if $debug; + return 0; + } +} + +# Process the 'message join' signal. (/JOIN) +sub message_join { + my ($server_rec, $channel, $nick, $addr) = @_; + my $tag = $server_rec->{tag}; + # Return if we don't care about this tag. + if (process_tag($tag) == 0) { + return 0; + } + $joins{$tag}{lc($nick)}++; + my $data = $tag.':'.lc($nick); + Irssi::timeout_add_once(2500, 'purge_nick', $data); + return 0; +} + +## Settings +# greetignore_networks: set the networks that you'd like this script to watch +Irssi::settings_add_str('greetignore', 'greetignore_networks', 'Rizon'); +# Signals to grab +Irssi::signal_add_first('message join', 'message_join'); +Irssi::signal_add_last("message public", "ignore_greet"); |
