summaryrefslogtreecommitdiffstats
path: root/scripts
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 /scripts
parent1777b5bab4b92f6eebd7269c2657ac824b61b067 (diff)
downloadscripts.irssi.org-b81e80975d35cd85a8ff34f5d2366b9bc8969c1b.tar.bz2
Add greetignore.pl
Diffstat (limited to 'scripts')
-rw-r--r--scripts/greetignore.pl103
1 files changed, 103 insertions, 0 deletions
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");