summaryrefslogtreecommitdiffstats
path: root/scripts/randaway.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/randaway.pl')
-rw-r--r--scripts/randaway.pl119
1 files changed, 119 insertions, 0 deletions
diff --git a/scripts/randaway.pl b/scripts/randaway.pl
new file mode 100644
index 0000000..91c8d38
--- /dev/null
+++ b/scripts/randaway.pl
@@ -0,0 +1,119 @@
+#!/usr/bin/perl -w
+# $Id: randaway.pl,v 1.12 2003/01/10 10:47:04 lkarsten Exp lkarsten $
+# Irssi script for random away-messages.
+#
+# adds /raway, /awayadd, /awayreasons and /awayreread.
+#
+# Based on simular script written by c0ffee.
+# original version made public in march 2002.
+#
+# changelog:
+# sep/02 - kuba wszolek (hipis@linux.balta.pl) reported problems with multiple
+# servers in v1.8 .. proposed fix is imported.
+# jan/03 - Wouter Coekaerts (wouter@coekaerts.be) provided fix using
+# get_irssi_dir() instead of $ENV[]. imported.
+#
+
+use strict;
+use Irssi 20011116;
+use Irssi::Irc;
+use vars qw($VERSION %IRSSI);
+
+$VERSION = '1.14';
+%IRSSI = (
+ authors => "Lasse Karstensen",
+ contact => "lkarsten\@stud.ntnu.no",
+ name => "randaway.pl",
+ description => "Random away-messages",
+ license => "Public Domain",
+ url => "http://www.stud.ntnu.no/~lkarsten/irssi/",
+);
+
+# file to read random reasons from. It should contain one
+# reason at each line, empty lines and lines starting with # is
+# skipped.
+my $reasonfile = Irssi::get_irssi_dir() . "/awayreasons";
+
+my @awayreasons;
+
+sub readreasons {
+ undef @awayreasons;
+ if (-f $reasonfile) {
+ Irssi::print("=> Trying to read awayreasons from $reasonfile");
+ open F, "<", $reasonfile;
+
+ # this actually makes the while() work like a while and not
+ # like a read() .. ie, stopping at each \n.
+ local $/ = "\n";
+ while (<F>) {
+ my $reason = $_;
+
+ # remove any naughty linefeeds.
+ chomp($reason);
+
+ # skips reason if it's an empty line or line starts with #
+ if ($reason =~ /^$/ ) { next; }
+ if ($reason =~ /^#/ ) { next; }
+
+ Irssi::print("\"$reason\"");
+
+ # adds to array.
+ push(@awayreasons, $reason);
+ }
+ close F;
+ Irssi::print("=> Read " . scalar(@awayreasons) . " reasons.");
+ } else {
+ # some default away-reasons.
+ Irssi::print("Unable to find $reasonfile, no reasons loaded.");
+ push(@awayreasons, "i\'m pretty lame!");
+ push(@awayreasons, "i think i forgot something!");
+ };
+}
+
+sub cmd_away {
+ # only do our magic if we're not away already.
+
+ if (Irssi::active_server()->{usermode_away} == 0) {
+ my ($reason) = @_;
+ # using supplied reason if .. eh, supplied, else find a random one if not.
+ if (!$reason) { $reason = $awayreasons[rand @awayreasons]; }
+ Irssi::print("awayreason used: $reason");
+ my $server = Irssi::servers();
+ $server->command('AWAY '.$reason);
+ } else {
+ Irssi::print("you're already away");
+ }
+}
+
+sub add_reason {
+ my ($reason) = @_;
+ if (!$reason) {
+ Irssi::print("Refusing to add empty reason.");
+ } else {
+ chomp($reason);
+ # adding to current environment.
+ push(@awayreasons, $reason);
+ # and also saving it for later.
+ open(F, ">>", $reasonfile);
+ print F $reason,"\n";
+ close F;
+ Irssi::print("Added: $reason");
+ }
+}
+
+sub reasons {
+ Irssi::print("Listing current awayreasons");
+ foreach my $var (@awayreasons) {
+ Irssi::print("=> \"$var\"");
+ }
+}
+
+# -- main program --
+
+readreasons();
+Irssi::command_bind('raway', 'cmd_away');
+Irssi::command_bind('awayreread', 'readreasons');
+Irssi::command_bind('awayadd', 'add_reason');
+Irssi::command_bind('awayreasons', 'reasons');
+
+# -- end of script --