alias parsemodes {
;$1=channel, $2=modestring, $3-=arguments
var %numargs = $numtok($3-,32)
var %nummodes = $len($remove($2,+,-))
var %sign, %char, %arg
var %mcount = 0, %acount = 0
var %i = 0, %ii = $len($2)
while (%i < %ii) {
inc %i
%char = $mid($2,%i,1)
if (%char isin +-) { %sign = %char | continue }
inc %mcount
if (%mcount <= $calc(%nummodes - %numargs)) { continue }
inc %acount
%arg = $gettok($3-,%acount,32)
if ($ison(%arg,$1)) {
;echo -a $+(%sign,%char) %arg
%cmodes = $hget(usermodes,$+($1,_,%arg))
if ((%sign == +) && (%char !isin %cmodes)) { hadd -m usermodes $+($1,_,%arg) $sortmodes($+(%cmodes,%char)) }
elseif ((%sign == -) && (%char isin %cmodes)) { hadd -m usermodes $+($1,_,%arg) $sortmodes($removecs(%cmodes,%char)) }
}
}
;;; Display usermodes hash
var %x = 0, %xx = $hfind(usermodes,*,0,w)
while (%x < %xx) {
inc %x
echo -a $hfind(usermodes,*,%x,w) $hget(usermodes,$hfind(usermodes,*,%x,w))
}
}
;Don't change this alias
alias sortmodes { return $remove($sorttok($regsubex($1,/([a-z])/gi,\1.),46),.) }
;This alias should return $true if $1 ison channel $2
alias ison { return $true }