summaryrefslogtreecommitdiffstats
path: root/scripts/away.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/away.pl')
-rw-r--r--scripts/away.pl199
1 files changed, 199 insertions, 0 deletions
diff --git a/scripts/away.pl b/scripts/away.pl
new file mode 100644
index 0000000..9018903
--- /dev/null
+++ b/scripts/away.pl
@@ -0,0 +1,199 @@
+# $Id: away.pl,v 1.6 2003/02/25 08:48:56 nemesis Exp $
+
+use strict;
+use Irssi 20020121.2020 ();
+use vars qw($VERSION %IRSSI);
+$VERSION = "0.23";
+%IRSSI = (
+ authors => 'Jean-Yves Lefort, Larry "Vizzie" Daffner, Kees Cook',
+ contact => 'jylefort@brutele.be, vizzie@airmail.net, kc@outflux.net',
+ name => 'away',
+ description => 'Away with reason, unaway, and autoaway',
+ license => 'BSD',
+ changed => '$Date: 2003/02/25 08:48:56 $ ',
+);
+
+# /SET
+#
+# away_reason if you are not away and type /AWAY without
+# arguments, this string will be used as
+# your away reason
+#
+# autoaway number of seconds before marking away,
+# only actions listed in "autounaway_level"
+# will reset the timeout.
+#
+# autounaway_level if you are away and you type a message
+# belonging to one of these levels, you'll be
+# automatically unmarked away
+#
+# levels considered:
+#
+# DCC a dcc chat connection has
+# been established
+# PUBLICS a public message from you
+# MSGS a private message from you
+# ACTIONS an action from you
+# NOTICES a notice from you
+#
+# changes:
+# 2003-02-24
+# 0.23?
+# merged with autoaway script
+#
+# 2003-01-09 release 0.22
+# * command char independed
+#
+# 2002-07-04 release 0.21
+# * signal_add's uses a reference instead of a string
+#
+# todo:
+#
+# * rewrite the away command to support -one and -all switches
+# * make auto-away stuff sane for multiple servers
+# * make auto-away reason configurable
+#
+# (c) 2003 Jean-Yves Lefort (jylefort@brutele.be)
+#
+# (c) 2000 Larry Daffner (vizzie@airmail.net)
+# You may freely use, modify and distribute this script, as long as
+# 1) you leave this notice intact
+# 2) you don't pretend my code is yours
+# 3) you don't pretend your code is mine
+#
+# (c) 2003 Kees Cook (kc@outflux.net)
+# merged 'autoaway.pl' and 'away.pl'
+#
+# BUGS:
+# - This only works for the first server
+
+use Irssi;
+use Irssi::Irc; # for DCC object
+
+my ($autoaway_sec, $autoaway_to_tag, $am_away);
+
+sub away {
+ my ($args, $server, $item) = @_;
+
+ if ($server)
+ {
+ if (!$server->{usermode_away})
+ {
+ # go away
+ $am_away=1;
+
+ # stop autoaway
+ if (defined($autoaway_to_tag)) {
+ Irssi::timeout_remove($autoaway_to_tag);
+ $autoaway_to_tag = undef();
+ }
+
+ if (!defined($args))
+ {
+ $server->command("AWAY " . Irssi::settings_get_str("away_reason"));
+ Irssi::signal_stop();
+ }
+ }
+ else
+ {
+ # come back
+ $am_away=0;
+ reset_timer();
+ }
+
+ }
+}
+
+sub cond_unaway {
+ my ($server, $level) = @_;
+ if (Irssi::level2bits(Irssi::settings_get_str("autounaway_level")) & $level)
+ {
+ #if ($server->{usermode_away})
+ if ($am_away)
+ {
+ # come back from away
+ $server->command("AWAY");
+ }
+ else
+ {
+ # bump the autoaway timeout
+ reset_timer();
+ }
+ }
+}
+
+sub dcc_connected {
+ my ($dcc) = @_;
+ cond_unaway($dcc->{server}, MSGLEVEL_DCC) if ($dcc->{type} eq "CHAT");
+}
+
+sub message_own_public {
+ my ($server, $msg, $target) = @_;
+ cond_unaway($server, MSGLEVEL_PUBLIC);
+}
+
+sub message_own_private {
+ my ($server, $msg, $target, $orig_target) = @_;
+ cond_unaway($server, MSGLEVEL_MSGS);
+}
+
+sub message_irc_own_action {
+ my ($server, $msg, $target) = @_;
+ cond_unaway($server, MSGLEVEL_ACTIONS);
+}
+
+sub message_irc_own_notice {
+ my ($server, $msg, $target) = @_;
+ cond_unaway($server, MSGLEVEL_NOTICES);
+}
+
+#
+# /AUTOAWAY - set the autoaway timeout
+#
+sub away_setupcheck {
+ $autoaway_sec = Irssi::settings_get_int("autoaway");
+ reset_timer();
+}
+
+
+sub auto_timeout {
+ my ($data, $server) = @_;
+ my $msg = "autoaway after $autoaway_sec seconds";
+
+ Irssi::timeout_remove($autoaway_to_tag);
+ $autoaway_to_tag=undef;
+
+ Irssi::print($msg);
+
+ $am_away=1;
+
+ my (@servers) = Irssi::servers();
+ $servers[0]->command("AWAY $msg");
+}
+
+sub reset_timer {
+ if (defined($autoaway_to_tag)) {
+ Irssi::timeout_remove($autoaway_to_tag);
+ $autoaway_to_tag = undef;
+ }
+ if ($autoaway_sec) {
+ $autoaway_to_tag = Irssi::timeout_add($autoaway_sec*1000,
+ "auto_timeout", "");
+ }
+}
+
+Irssi::settings_add_str("misc", "away_reason", "not here");
+Irssi::settings_add_str("misc", "autounaway_level", "PUBLIC MSGS ACTIONS DCC");
+Irssi::settings_add_int("misc", "autoaway", 0);
+
+Irssi::signal_add("dcc connected", \&dcc_connected);
+Irssi::signal_add("message own_public", \&message_own_public);
+Irssi::signal_add("message own_private", \&message_own_private);
+Irssi::signal_add("message irc own_action", \&message_irc_own_action);
+Irssi::signal_add("message irc own_notice", \&message_irc_own_notice);
+Irssi::signal_add("setup changed" => \&away_setupcheck);
+
+Irssi::command_bind("away", "away");
+
+away_setupcheck();
+