Here's what I've got so far:
Code:
alias xwhois {
  if ($isid) return
  if (($1 == $null) && (#* !iswm $active)) {
    echo -ac info * /xwhois: insufficient parameters
    return
  }
  if (($1 != $null) && (#* !iswm $1)) {
    echo -ac info * /xwhois: invalid parameters
    return
  }
  if ($hget(xwhois. $+ $iif($1 != $null,$1,$active))) {
    echo -ac info * /xwhois: operation already in progress $+($chr(40),$iif($1,$1,$active),$chr(41))
    echo -ac info * /xwhois: type /xwhoisabort to cancel /xwhois.
    return
  }
  var %chan = $iif($1 != $null,$1,$active), %y = $nick(%chan,0)
  echo -ac info * Performing /whois on all users in %chan $+ . $+($chr(40),%y users total,$chr(41))
  hmake xwhois 1
  while (%y) {
    hadd xwhois $nick(%chan,%y)
    dec %y
  }
  .timerxwhois 0 2 xwhoistimer %chan
}
raw 319:*: {
  if ($2 == %xwhois.nick) {
    echo -ac info * /xwhois: $2 is on channels: $3-
  }
}
alias xwhoistimer {
  if ($hget(xwhois) == $null) {
    .timerxwhois off
    return
  }
  var %x = $hget(xwhois,1).item, %c = $iif($hget(xwhois,2).item == $null,1,0)
  set -u3 %xwhois.nick %x
  whois %x
  hdel xwhois %x
  if (%c) {
    echo -ac info * /xwhois: Done doing /xwhois on $1 $+ .
    hfree xwhois
    .timerxwhois off
    .disable #xwhois
  }
}
alias xwhoisabort {
  var %x = $timer(xwhois).com
  .timerxwhois off
  hfree xwhois
  echo -ac info * /xwhoisabort: /xwhois on $gettok(%x,2,32) has been canceled.
}

/xwhois [#channel]
Performs a /whois on all the users in #channel, with a 2 second delay to each whois, then echos the result in [#channel], or the channel /xwhois was performed in.
/xwhoisabort
Aborts the current /xwhois.


If you want it to echo to a custom window, change
Code:
echo -ac info
;to:
echo -c info @window
;For a custom window.
;or:
echo -c info $1
;For the channel you're doing the /xwhois on.
;NOTE: Only change the echo in the "xwhoisc" alias, or you might not receive feedback.


Those who can, cannot. Those who cannot, can.