# $Id: userhost.pl,v 1.18 2002/07/04 13:18:02 jylefort Exp $
use strict;
use Irssi 20020121.2020 ();
use vars qw($VERSION %IRSSI);
$VERSION = "0.23";
%IRSSI = (
authors => 'Jean-Yves Lefort',
contact => 'jylefort\@brutele.be, decadix on IRCNet',
name => 'userhost',
description => 'Adds a -cmd option to the /USERHOST builtin command',
license => 'BSD',
url => 'http://void.adminz.be/irssi.shtml',
changed => '$Date: 2002/07/04 13:18:02 $ ',
);
# usage:
#
# /USERHOST [-cmd ]
#
# -cmd evaluate the specified Irssi command
#
# percent substitutions in command:
#
# %n nick
# %u user
# %h host
# %% a single percent sign
#
# examples:
#
# /userhost albert -cmd echo %n is %u at %h
# /userhost john james -cmd exec xterm -e ping %h
#
# changes:
#
# 2002-07-04 release 0.23
# * signal_add's uses a reference instead of a string
#
# 2002-02-08 release 0.22
# * safer percent substitutions
#
# 2002-01-27 release 0.21
# * uses builtin expand
#
# 2002-01-24 release 0.20
# * now replaces builtin /USERHOST
#
# 2002-01-23 initial release
# -verbatim- import expand
sub expand {
my ($string, %format) = @_;
my ($len, $attn, $repl) = (length $string, 0);
$format{'%'} = '%';
for (my $i = 0; $i < $len; $i++) {
my $char = substr $string, $i, 1;
if ($attn) {
$attn = undef;
if (exists($format{$char})) {
$repl .= $format{$char};
} else {
$repl .= '%' . $char;
}
} elsif ($char eq '%') {
$attn = 1;
} else {
$repl .= $char;
}
}
return $repl;
}
# -verbatim- end
my $queuedcmd;
sub userhost_reply {
if ($queuedcmd) {
my ($server, $args, $sender, $sender_address) = @_;
if ($args =~ / :(.*)$/) {
foreach (split(/ /, $1)) {
$server->command(expand($queuedcmd, "n", $1, "u", $2, "h", $3))
if (/(.*)\*?=[-+][-+~]?(.*)@(.*)/);
}
}
$queuedcmd = undef;
Irssi::signal_stop();
}
}
sub userhost {
my ($args, $server, $item) = @_;
my ($nicks, $command) = split(/ -cmd /, $args);
if ($queuedcmd = $command) {
$server->send_raw("USERHOST :$nicks");
Irssi::signal_stop();
}
}
Irssi::signal_add("event 302", \&userhost_reply);
Irssi::command_bind("userhost", \&userhost);