use strict; no warnings; use feature qw/switch/; use Irssi; our $VERSION = '0.10'; our %IRSSI = ( author => 'black@justla.me', name => 'delayer.pl', todo => 'NOTHING', ); my %delaylist = (); sub delayer { my ($server, $nick, $user, $host, $real_name, $away_msg) = @_; if ($delaylist{$nick}) { $server->command("query $nick $delaylist{$nick}"); removedelays($nick); } } sub delaycmd { my $command = shift; if (substr($command, 0, 1) eq '-') { $command = substr($command, 1 +) } my ($option, $args) = split(' ', $command, 2); if (!$option) { listdelays(); return; } given ("$option") { when (/^list$/i) { listdelays() } when (/^add$/i) { ($args) ? adddelays($args) : + usage() } when (/^remove$/i || /^rem$/i) { removedelays($args) ; print +"$args" } default { usage() } } } sub listdelays { my $nicklist = shift; my @nicks; if (!$nicklist) { @nicks = keys %delaylist; } else { @nicks = split(' ', $nicklist) } if (!@nicks) { print "\cBdelayER\cB: delay list is empty."; return; } print "\cBdelayER\cB"; foreach (@nicks) { print "--> \cB$_\cB: $delaylist{ $_ }"; } } sub adddelays { my $addcmd = shift; my ($nicklist, $msg) = split(' ', $addcmd, 2); if (!$msg) { usage(); return; } my @nicks = split(',', $nicklist); my %hash = map { $_, 1 } @nicks; @nicks = keys %hash; if (keys %delaylist) { my @isect = (); map { $hash{$_} = 1 } keys %delaylist; @isect = grep { $hash{$_} } @nicks; if (@isect) { # removedelays(@isect); } } foreach (@nicks) { $delaylist{ $_ } = $msg; } print "\cBdelayER\cB: " . scalar(@nicks) . ' delays added.'; } sub removedelays { my $nicklist = shift; if (!$nicklist) { %delaylist = (); print "\cBdelayER\cB: All delays removed."; } else { foreach (split(' ', $nicklist)) { delete $delaylist{ $_ }; } print "\cBdelayER\cB: " . scalar(split(' ', $nicklist)) . ' delays removed.'; } } sub usage { print <<EOF \cBdelayER\cB Send a private message to a person on your /NOTIFY list when they join + the server. Usage: /delay (-add|add) nick[,nick...] message Add a delay for a nick, or a comma-delimited list of nicks. One delay per nick! Existing delays will be replaced without warni +ng. /delay (-remove|remove|rem) [nick [nick...]] Remove a delay targeted at a nick, or space-delimited list of nick +s. If no nick is supplied, all delays will be removed without warning +. /delay [-list|list] Display a list of delays which have been set. Anything else will display this text. EOF } Irssi::signal_add('notifylist joined', 'delayer'); Irssi::command_bind('delay', 'delaycmd'); Irssi::command_set_options('delay','add remove list help usage');
In reply to Script replaces instead of add by geekism
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |