[color:green]; Usage: /RemainingUsers [#]<channel>
; [/color]
alias RemainingUsers {
[color:green]
; Create the matchtext field for raw 353 and 366 to trigger on
; [/color]
set -u600 %353 $me & #$$1 *
set -u600 %366 $me #$1 End of /NAMES list.
[color:green]
; Open a minimized, hidden desktop listwindow to store the nicks; it's entirely possible that this
; alias might be used on a channel with a large number of nicks (like 2500) which makes storing
; the nicks in a variable untenable. And since (join) order is quite likely important, a hash table
; wouldn't be the best idea either. That leaves either a file (slow access) or a hidden @window.
; [/color]
window -nhdl @RemainingUsers
[color:green]
; Now request the join order from /NAMES.
; [/color]
.raw names #$1
}
[color:green]
; 353 RPL_NAMREPLY
; [/color]
raw 353:%353:{
[color:green]
; Remove the @'s and +'s from in front of nicks. If your network uses additional symbols in front
; of nicks, add them to the list of symbols inside the $remove().
; [/color]
var %rnicks = $remove($4-, @, +)
[color:green]
; Check to see if there are already nicks in @RemainingUsers, which would mean that we've found $me
; somewhere in a previous 353.
; [/color]
if $line(@RemainingUsers, 0) {
[color:green]
; Since $me is already in @RemainingUsers, add all these new nicks to variable.
; [/color]
var %nicks = %rnicks
}
[color:green]
; Or if $me is found in this line, then we can start processing nicks
; [/color]
elseif $istok(%rnicks, $me, 32) {
[color:green]
; Chop off any nicks prior to $me.
; [/color]
var %nicks = $gettok(%rnicks, $+($findtok(%rnicks, $me, 1, 32), -), 32)
}
[color:green]
; Now check to see if we need to process this 353 any more.
; [/color]
if %nicks {
[color:green]
; Add each nick to @RemainingUsers
; [/color]
var %i = 1
while $gettok(%nicks, %i, 32) {
aline @RemainingUsers $ifmatch
inc %i
}
}
[color:green]
; Halt the normal display.
; [/color]
halt
}
[color:green]
; Echoing alias for /filter -k used in RPL_ENDOFNAMES to display the nicks.
; [/color]
alias -l f_echo {
echo -gtic info2 $gettok(%366, 2, 32) $1
}
[color:green]
; 366 RPL_ENDOFNAMES
; [/color]
raw 366:%366:{
[color:green]
; Get rid of the first line, which will be equal to $me.
; [/color]
dline @RemainingUsers 1
[color:green]
; Display the list however you like. This example uses /filter with an alias to echo.
; [/color]
filter -wk @RemainingUsers f_echo
[color:green]
; Clean up the /set variables used and close the data window.
; [/color]
unset %353 %366
window -c @RemainingUsers
[color:green]
; Halt the normal display.
; [/color]
halt
}