1# Answers "$nick: No." if you're away and someone asks are you online on a channel. 2 3use strict; 4use Irssi; 5use locale; 6 7use vars qw($VERSION %IRSSI %answers $floodlimit %floodi); 8 9$VERSION = '0.9'; 10%IRSSI = ( 11 authors => 'Johan "Ion" Kiviniemi', 12 contact => 'ion at hassers.org', 13 name => 'NotOnline', 14 description => 15'Answers "$nick: No." if you\'re away and someone asks are you online on a channel', 16 license => 'Public Domain', 17 url => 'http://ion.amigafin.org/irssi/', 18 changed => 'Tue Mar 12 22:20 EET 2002', 19); 20 21%answers = ( 22 'online' => 'Offline.', 23 'there' => 'Not here.', 24 'idle' => 'Of course.', 25 'paikalla' => 'En, vaan paikassa.', 26 'siell�' => 'Ei kun tuolla.', 27 'siellä' => 'Ei kun tuolla.', 28 'hereill�' => 'Nukkumassa.', 29 'hereillä' => 'Nukkumassa.', 30); 31 32$floodlimit = 600; # notice the same channel only once in N seconds 33%floodi = (); 34 35Irssi::signal_add_last( 36 'message public' => sub { 37 my ($server, $msg, $nick, $address, $target) = @_; 38 39 # Am i away? 40 return unless $server->{usermode_away}; 41 42 # Am i asked about something? 43 my $own_nick = $server->{nick}; 44 $own_nick =~ s/\W//g; 45 return 46 unless $msg =~ /^(\Q$server->{nick}\E|\Q$own_nick\E)\s*[,:].+\?/i; 47 48 # Is it me who's talking? 49 return if $nick eq $server->{nick}; 50 51 # Are you asking the right question? 52 my $answer; 53 foreach (keys %answers) { 54 $answer = $answers{$_} if $msg =~ /\b\Q$_\E\b/i; 55 } 56 return unless $answer; 57 58 # You aren't flooding, are you? 59 if (defined $floodi{$target}) { 60 if (time - $floodi{$target} < $floodlimit) { 61 return; 62 } else { 63 undef $floodi{$target}; 64 } 65 } 66 67 $nick =~ s/\W//g; 68 $nick = lc $nick 69 if Irssi::settings_get_bool('completion_nicks_lowercase'); 70 $nick .= Irssi::settings_get_str('completion_char') || ":"; 71 72 $floodi{$target} = time; 73 $server->command("msg $target $nick $answer"); 74 # Irssi::print("msg $target $nick $answer"); 75 } 76); 77