Sometimes in a function you need to know the full username and hostname for some nick. If this happens in a hook, and the nick is the one who did the action, then the nick is in $who and the userhost data is already in $user and $host.
Otherwise, you have to call the perl function &userhost giving it three arguments: the nickname, what you want evaluated when the data is available, and what you want evaluated if the nick is not found on IRC; if the third argument is ommited, sirc will print the default message "*?* somenickname not found on IRC".
Unlike with earlier versions of sirc, it is possible to do more than one userhost request in a short time before getting the answers from the server.
Example: a function that prints someone's country code
# country code
sub printcountry { # prints $host's country code
if ($host =˜ /\.([^.]+)$/) { # match the last part of the host
local($c)=($1); # put it in local var $c
$c="USA" if $c =˜ /^edu$/i; # if it's a .edu, say it's USA
$c="USA (probably)" if $c =˜ /^com$/i || $c =˜ /^org$/i || $c =˜ /^net$/i;
# if it's a .org, .com or .net, it's
# probably in the USA too
if ($c =˜ /^\d+$/) { # if it's a number
&tell("*** out of luck, $who has an IP address :p");
# complain, it's an IP
} else { # otherwise
&tell("*** $who is in $c");
# announce the result
}
}
}
sub cmd_country { # this is the command
&getarg; # get the argument in $newarg
if ($newarg) { # if it's there
&userhost($newarg, "&printcountry;");
# request a userhost with &printcountry as
# action to take
} else { # otherwise
&tell("*** Whose?"); # complain
}
}
&addcmd("country"); # install the command |