summaryrefslogtreecommitdiffstats
path: root/scripts/userhost.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/userhost.pl')
-rw-r--r--scripts/userhost.pl103
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/userhost.pl b/scripts/userhost.pl
new file mode 100644
index 0000000..339b309
--- /dev/null
+++ b/scripts/userhost.pl
@@ -0,0 +1,103 @@
+# $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 <nicks> [-cmd <command>]
+#
+# -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);