summaryrefslogtreecommitdiffstats
path: root/scripts/away_verbose.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/away_verbose.pl')
-rw-r--r--scripts/away_verbose.pl234
1 files changed, 234 insertions, 0 deletions
diff --git a/scripts/away_verbose.pl b/scripts/away_verbose.pl
new file mode 100644
index 0000000..29aefd1
--- /dev/null
+++ b/scripts/away_verbose.pl
@@ -0,0 +1,234 @@
+use Irssi;
+use strict;
+use vars qw($VERSION %IRSSI);
+
+$VERSION = '0.0.7';
+%IRSSI = (
+ authors => 'Wouter Coekaerts, Koenraad Heijlen',
+ contact => 'vipie@ulyssis.org, wouter@coekaerts.be',
+ name => 'away_verbose',
+ description => 'A verbose away script, displays a verbose away/back message in the channels you are in. BUT it can limit the channels (not spamming every channel!)',
+ license => 'GNU GPL version 2',
+ url => 'http://vipie.studentenweb.org/dev/irssi/',
+ changed => '2004-01-01'
+);
+
+#--------------------------------------------------------------------
+# Changelog
+#--------------------------------------------------------------------
+#
+# away_verbose.pl 0.7 (2004-01-01)
+# * Wouter Coekaerts
+# - don't hard code the command char
+#
+# away_verbose.pl 0.5 (2002-11-17)
+# * James Seward
+# - make regex case insensitive
+#
+#--------------------------------------------------------------------
+
+#--------------------------------------------------------------------
+# Public Variables
+#--------------------------------------------------------------------
+my $away_time_texts = "wk,wks,day,days,hr,hrs,min,mins,sec,secs";
+my ($away_set, $away_time, $away_reason, $away_silent)=(0,0,"",0);
+my %myHELP = ();
+
+
+#--------------------------------------------------------------------
+# Help function
+#--------------------------------------------------------------------
+sub cmd_help {
+ my ($about) = @_;
+
+ %myHELP = (
+ back => "
+BACK
+
+Away is unset, the time you were away is displayed in the channel with the reason.
+
+like this: /me away_back_text_part1 <reason> away_back_text_part2 TIME
+
+Currently it will display:
+/me " . Irssi::settings_get_str('away_back_text_part1') . " Some Reason " . Irssi::settings_get_str('away_back_text_part2') . " " . &secs2text(10000) . "
+
+You can change this by changing the settings (with /set setting_name):
+
+* away_back_text_part1 (default: is back from)
+* away_back_text_part2 (default: after)
+* away_time_texts (default: wk,wks,day,days,hr,hrs,min,mins,sec,secs)
+
+",
+
+ gone => "
+GONE <your away reason>
+
+Sets you away with the given reason, and displays it publically on the allowed channels.
+
+like this: /me away_gone_text <reason>
+
+Currently it will display:
+/me " . Irssi::settings_get_str('away_gone_text') . " Some Reason
+
+You can change this by changing the settings (with /set setting_name):
+
+* away_gone_text (default: is gone:)
+
+
+How do I decide on which channels they away message is displayed?
+-----------------------------------------------------------------
+
+You set 2 settings: away_order_channels, away_allow_channels.
+
+away_order_channels = [allow|exclude]
+ Should the channels be allowed or excluded using a regular expression. (exclude = all but the matching channels).
+
+away_allow_channels = <regular expression>
+ The regular expression limiting the channels (eg 'linux|home' without the '').
+",
+
+ awe => "
+AWE [<your away reason>]
+
+When a reason is given, it acts as GONE
+When no reason is supplied it acts as BACK.
+
+SEE ALSO: HELP BACK, HELP GONE
+",
+
+);
+
+ if ( $about =~ /(back|gone|awe)/i ) {
+ Irssi::print($myHELP{$1});
+ }
+}
+
+
+#--------------------------------------------------------------------
+# Translate the number of seconds to a human readable format.
+#--------------------------------------------------------------------
+sub secs2text {
+ $away_time_texts = Irssi::settings_get_str('away_time_texts');
+ my ($secs) = @_;
+ my ($wk_,$wks_,$day_,$days_,$hr_,$hrs_,$min_,$mins_,$sec_,$secs_) = (0,1,2,3,4,5,6,7,8,9,10);
+ my @texts = split(/,/,$away_time_texts);
+ my $mins=int($secs/60); $secs -= ($mins*60);
+ my $hrs=int($mins/60); $mins -= ($hrs*60);
+ my $days=int($hrs/24); $hrs -= ($days*24);
+ my $wks=int($days/7); $days -= ($wks*7);
+ my $text = (($wks>0) ? (($wks>1) ? "$wks $texts[$wks_] " : "$wks $texts[$wk_] ") : "" );
+ $text .= (($days>0) ? (($days>1) ? "$days $texts[$days_] " : "$days $texts[$day_] ") : "" );
+ $text .= (($hrs>0) ? (($hrs>1) ? "$hrs $texts[$hrs_] " : "$hrs $texts[$hr_] ") : "" );
+ $text .= (($mins>0) ? (($mins>1) ? "$mins $texts[$mins_] " : "$mins $texts[$min_] ") : "" );
+ $text .= (($secs>0) ? (($secs>1) ? "$secs $texts[$secs_] " : "$secs $texts[$sec_] ") : "" );
+ $text =~ s/ $//;
+ return $text;
+}
+
+#--------------------------------------------------------------------
+# Output the public away on all permitted channels.
+#--------------------------------------------------------------------
+sub away_describe_pub_channels {
+ my $away_allow_channels=Irssi::settings_get_str('away_allow_channels');
+ my $away_order_channels=Irssi::settings_get_str('away_order_channels');
+ my ($server,$text) = @_;
+ foreach my $server (Irssi::servers) {
+ foreach my $chan ($server->channels) {
+
+ if ((($server->{chatnet} .":". $chan->{name}) =~ /$away_allow_channels/i) != ($away_order_channels eq "exclude")) {
+ $server->command("DESCRIBE $chan->{name} $text");
+ }
+ }
+ }
+}
+
+#--------------------------------------------------------------------
+# Set the away reason, and call the function to do the announce.
+#--------------------------------------------------------------------
+sub away_setaway {
+ my ($server, $reason)=@_;
+
+ my $away_gone_text=Irssi::settings_get_str('away_gone_text');
+
+ $server->command("AWAY " . $reason);
+ away_describe_pub_channels($server,"$away_gone_text $reason");
+ $away_time=time;
+ $away_reason=$reason;
+ $away_set=1;
+}
+
+#--------------------------------------------------------------------
+# Remove the away reason, and call the function to do the announce.
+#--------------------------------------------------------------------
+sub away_back {
+ my($server)=@_;
+
+ my $away_back_text_part1=Irssi::settings_get_str('away_back_text_part1');
+ my $away_back_text_part2=Irssi::settings_get_str('away_back_text_part2');
+
+ if ( $away_set ) {
+ $server->command("AWAY");
+ away_describe_pub_channels($server,"$away_back_text_part1 $away_reason $away_back_text_part2 " . secs2text(time - $away_time));
+ $away_time=0;
+ $away_reason="";
+ $away_set=0;
+
+ } else {
+ Irssi::print("Don't use back if you are not away! OXYMORON");
+ Irssi::print("(ed. note) OXYMORON: a combination of contradictory or incongruous words (as cruel kindness)");
+ return;
+ }
+}
+
+#--------------------------------------------------------------------
+# Defintion of /gone, /back and /awe
+#--------------------------------------------------------------------
+sub gone {
+ my ($args, $server, $item) = @_;
+ away_setaway($server,$args);
+}
+
+sub back {
+ my ($args, $server, $item) = @_;
+ away_back($server);
+}
+
+sub cmd_away {
+ my ($args, $server, $item) = @_;
+
+ if ( $args ) {
+ away_setaway($server,$args);
+ } else {
+ away_back($server);
+ }
+}
+
+
+#--------------------------------------------------------------------
+# Irssi::Settings / Irssi::command_bind
+#--------------------------------------------------------------------
+
+Irssi::settings_add_str('away', 'away_allow_channels', "^\$");
+Irssi::settings_add_str('away', 'away_order_channels', "exclude");
+Irssi::settings_add_str('away', 'away_time_texts', $away_time_texts);
+
+Irssi::settings_add_str('away', 'away_gone_text', "is gone:");
+Irssi::settings_add_str('away', 'away_back_text_part1', "is back from");
+Irssi::settings_add_str('away', 'away_back_text_part2', "after");
+
+Irssi::command_bind("gone", "gone", "Advanced Away");
+Irssi::command_bind("back", "back", "Advanced Away");
+Irssi::command_bind("awe","cmd_away", "Advanced Away");
+
+Irssi::command_bind("help","cmd_help", "Irssi commands");
+
+#--------------------------------------------------------------------
+# This text is printed at Load time.
+#--------------------------------------------------------------------
+
+Irssi::print("Use /back, /gone <reason>, or the toggle /awe [<reason>]");
+Irssi::print("Use /away [<reason>] for silent away");
+Irssi::print("Use /help back or gone or awe for more information.");
+
+
+#- end