summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico R. Wohlgemuth2014-09-07 12:13:09 +0200
committerNico R. Wohlgemuth2014-09-07 12:13:09 +0200
commitb81e80975d35cd85a8ff34f5d2366b9bc8969c1b (patch)
tree7353bd9d71aed17bc2470308c8f4909f439c743d
parent1777b5bab4b92f6eebd7269c2657ac824b61b067 (diff)
downloadscripts.irssi.org-b81e80975d35cd85a8ff34f5d2366b9bc8969c1b.tar.bz2
Add greetignore.pl
-rw-r--r--_data/scripts.yaml10
-rw-r--r--scripts/greetignore.pl103
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");