Auth-Update
From Scriptwiki
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AUTH_UPDATE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;info: ; ; by Vliedel -- #vliedel @ QuakeNet ; version 1.0 (written and tested on mIRC 6.2) ; made for Quakenet (used some tricks that may not work on other networks) ; ; ;What does this script do? ; ; - updates the auths of nicks and stores them in a hash table (auths.$cid) ; - if a channel is too big, /who nick1,nick2,nick3 etc is done untill the auths for the channel is updated ; - users with host auth.users.quakenet.org will be saved without a /who ; - users who are not authed (auth 0) will be checked every x time to see if they are authed yet ; - script updates from biggest to the smallest channel ; ; ;How to use this script? ; ; - /load -rs auth_update.mrc to load the script ; - config the options below ; - script starts on load or on connect ; - to get a nicks auth use: $hget(auths. $+ $cid,nick) ; - /authupdate.next <nick> [nick] [nick] ... can be used to get auths of those nicks as soon as possible ; please note that this will use a bit less efficient way to get the auths. ; you can use the next script to see when a nick is updated ; on *:SIGNAL:authupdate:{ ; if ($2 == $null) { echo -a $1 is not on a common channel } ; elseif ($2 == 0) { echo -a $1 is not authed } ; else { echo -a $1 is authed as $2 } ; } ; - /authupdate can be used to make the script update the auths without waiting for the timer to trigger it ; ; ;Why is this script good? ; ; - sending /who chan for every channel is not needed and goes slow (lag) ; - sending /who chan on join may cause Excess Flood or Max sendQ exceeded ; - sending /who chan1,chan2,chan3 can be much faster, but only if there are not too many results (Max sendQ exceeded) ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l max.who { ; maximum number of replies in a WHO, too big may cause 'Max sendQ exceeded' disconnection ; too low may take the script a long time to update the auths, 1000 should be fine for most situations return 1000 } alias -l len.who { ; maximum length of the /who <string>, too long may cause the server to ignore the command ; too low may slow things down, 400 should be fine in most cases return 400 } alias -l delay.who { ; N seconds after the first join, the script starts to update the auths return 10 } alias -l repeat.who { ; wait N seconds after doing /who to do the next check and /who return 20 } alias -l minnicks.who { ; minimum nr of nicks with unknown auth in a channel to do /who #channel rather then /who nick,nick, return 3 } alias -l minratio.who { ; minimum ratio of (nicks with unknown auth) / (total nicks) in a channel to do /who #channel rather then /who nick,nick, return 0.04 } alias -l queue.repeat.who { ; number of seconds to do the next /who to check if someone who wasn't authed is now authed return 600 } alias -l next.wait { ; wait N seconds to do the next /who check triggered by authupdate.next after the last /who check triggered by authupdate.next return 10 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTHUPDATE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias authupdate { echo -a Auth update: $auth_update.update } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTHUPDATE.NEXT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias authupdate.next { var %i = $0 while (%i) { var %n = $gettok($1-,%i,32) if (!$comchan(%n,1)) { .signal authupdate %n } else { auth.n.add %n } dec %i } if (!$timer($cid $+ .auth_update.next)) { .timer $+ $cid $+ .auth_update.next 1 $next.wait auth_update.update n auth_update.update n } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LOAD EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:LOAD:{ scon -at1 auth_load } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH_LOAD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth_load { .timer $+ $cid $+ .auth_update.update 1 $delay.who auth_update.update if ($hget(auths. $+ $cid)) { hfree $v1 } if ($hget(auths.l. $+ $cid)) { hfree $v1 } if ($hget(auths.q. $+ $cid)) { hfree $v1 } if ($hget(auths.n. $+ $cid)) { hfree $v1 } hmake auths. $+ $cid 200 hmake auths.l. $+ $cid 200 hmake auths.q. $+ $cid 200 hmake auths.n. $+ $cid 100 var %i = $comchan($me,0) while (%i) { var %chan = $comchan($me,%i) var %j = $nick(%chan,0) while (%j) { auth.l.add.wid $chan(%chan).wid $nick(%chan,%j) dec %j } dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH_UPDATE.UPDATE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth_update.update { var %who if (!$hget(auths.u. $+ $cid)) { hmake auths.u. $+ $cid 200 var %who = $auth_update.who if (%who) { hadd auths.u. $+ $cid -mask %who $+ ,,,273 .quote WHO %who $+ ,,,273 % $+ nat,273 } else { hfree auths.u. $+ $cid .timer $+ $cid $+ .auth_update.update 1 $$repeat.who auth_update.update } } if (%who) { return updating } elseif ($hget(auths.u. $+ $cid)) { return already in progress } else { return nothing to update } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH_UPDATE.SORT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; sorts channels by number of nicks in channel ; <number of nicks>.<channel number> ; returns 127.1 23.2 <= means 127 nicks on comchan 1 alias -l auth_update.sort { var %i = $comchan($me,0) , %chans while (%i) { var %chans = %chans $nick($comchan($me,%i),0) $+ . $+ %i dec %i } return $sorttok(%chans,32,n) } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH_UPDATE.WHO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; $auth_update.who(N,L) ; returns #chan,#chan,nick,nick alias -l auth_update.who { var %t = auths.u. $+ $cid , %t.l = auths.l. $+ $cid , %t.q = auths.q. $+ $cid , %t.n = auths.n. $+ $cid var %n.max = $max.who , %l.max = $len.who , %n.min = $minnicks.who , %ratio = $minratio.who var %len , %n.nr , %chans , %nicks , %chans.go if $hget(auths.n.temp) { hfree auths.n.temp } hmake auths.n.temp var %n = $hget(%t.n,-firstnick) while (%n) { inc %len $calc($len(%n) + 1) inc %n.nr if (%n.nr > %n.max) || (%len > %l.max) { dec %n.nr | dec %len $calc($len(%n) + 1) | break } hadd auths.n.temp %n 1 hadd %t %n 1 var %nicks = $addtok(%nicks,%n,44) , %n = $gettok($hget(%t.n,%n),2,32) } var %sorted = $auth_update.sort , %i = $numtok(%sorted,32) , %time = $calc($ctime - $queue.repeat.who) while (%i) { var %comchan = $gettok($gettok(%sorted,%i,32),2,46) , %chan = $comchan($me,%comchan) , %id = $chan(%chan).wid $+ . var %n.c = $nick(%chan,0) , %left , %go if (%n.c > %n.max) { break } if $hget(auths.temp) { hfree auths.temp } hmake auths.temp var %n = $hget(%t.n,%id $+ -firstnick) while (%n) { if (!$hget(%t,%n)) || ($hget(auths.n.temp,%n)) { hadd auths.temp %n 1 | inc %left } if (((%left >= %n.min) && ($calc(%left / %n.c) >= %ratio)) || (%left == %n.c)) { var %go = 1 | break } var %n = $gettok($hget(%t.n,%id $+ %n),2,32) } var %n = $hget(%t.l,%id $+ -firstnick) while (%n) { if (!$hget(%t,%n)) && (!$hget(auths.temp,%n)) { inc %left } if (((%left >= %n.min) && ($calc(%left / %n.c) >= %ratio)) || (%left == %n.c)) { var %go = 1 | break } var %n = $gettok($hget(%t.l,%id $+ %n),2,32) } var %n = $hget(%t.q,%id $+ -firstnick) while (%n) { tokenize 32 $hget(%t.q,%id $+ %n) if ($1 > %time) { break } if (!$hget(%t,%n)) && (!$hget(auths.temp,%n)) { inc %left } if (((%left >= %n.min) && ($calc(%left / %n.c) >= %ratio)) || (%left == %n.c)) { var %go = 1 | break } var %n = $3 } if (!%go) { dec %i | continue } var %j = %n.c , %n.tmp = %n.nr , %l.tmp = %len , %chans.go = %chans.go %comchan inc %l.tmp $calc($len(%chan) + 1) while (%j) { var %n = $nick(%chan,%j) if (!$hget(%t,%n)) { inc %n.tmp } if ($hget(auths.n.temp,%n)) { dec %l.tmp $calc($len(%n) + 1) } dec %j } if (%l.tmp > %l.max) || (%n.tmp > %n.max) { dec %i | continue } var %j = $nick(%chan,0) while (%j) { var %n = $nick(%chan,%j) hadd %t %n 1 hdel auths.n.temp %n var %nicks = $remtok(%nicks,%n,1,44) dec %j } var %len = %l.tmp , %n.nr = %n.tmp , %chans = $addtok(%chans,%chan,44) dec %i } var %i = $comchan($me,0) while (%i) { var %chan = $comchan($me,%i) if (($nick(%chan,0) > %n.max) || (!$istok(%chans.go,%i,32))) { var %id = $chan(%chan).wid $+ . , %n = $hget(%t.l,%id $+ -firstnick) while (%n) { if (!$hget(%t,%n)) { inc %len $calc($len(%n) + 1) inc %n.nr if (%n.nr > %n.max) || (%len > %l.max) { break } hadd %t %n 1 var %nicks = $addtok(%nicks,%n,44) } var %n = $gettok($hget(%t.l,%id $+ %n),2,32) } if (%n.nr > %n.max) || (%len > %l.max) { break } var %n = $hget(%t.q,%id $+ -firstnick) while (%n) { tokenize 32 $hget(%t.q,%id $+ %n) if ($1 > %time) { break } if (!$hget(%t,%n)) { inc %len $calc($len(%n) + 1) inc %n.nr if (%n.nr > %n.max) || (%len > %l.max) { break } hadd %t %n 1 var %nicks = $addtok(%nicks,%n,44) } var %n = $3 } } if (%n.nr > %n.max) || (%len > %l.max) { break } dec %i } if $hget(auths.temp) { hfree auths.temp } if $hget(auths.n.temp) { hfree auths.n.temp } return $addtok(%chans,%nicks,44) } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RAW 354 SPECIAL WHO REPLY ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 354 <you> <nr> <nick> <auth> ; 354 Vliedel 273 L 0 RAW 354:& 273 & &:{ if ($comchan($3,1)) { auth_update.nick $3 $4 } elseif ($hget(auths.n. $+ $cid,$3)) { auth.n.rem $3 | .signal authupdate $3 } haltdef } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RAW 315 WHO END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 315 <you> <requested> :End of /who list. ; 315 Vliedel #vliedel,Rutix,fishbot :End of /WHO list. RAW 315:& & end of /WHO list.: { if ($hget(auths.u. $+ $cid,-mask) == $2) { hfree auths.u. $+ $cid .timer $+ $cid $+ .auth_update.update 1 $$repeat.who auth_update.update haltdef } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH_UPDATE.NICK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; $1 = nick $2 = auth alias -l auth_update.nick { auth.add $1 $2 auth.l.rem $1 if ($2 == 0) { auth.q.add $1 } else { auth.q.rem $1 } if ($hget(auths.n. $+ $cid,$1)) { auth.n.rem $1 | .signal authupdate $1 $2 } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; JOIN EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:JOIN:#:{ if ($nick == $me) { if (!$hget(auths. $+ $cid)) { hmake auths. $+ $cid 200 } if (!$hget(auths.l. $+ $cid)) { hmake auths.l. $+ $cid 200 } if (!$hget(auths.q. $+ $cid)) { hmake auths.q. $+ $cid 200 } if (!$hget(auths.n. $+ $cid)) { hmake auths.n. $+ $cid 100 } if (!$timer($cid $+ .auth_update.update)) { .timer $+ $cid $+ .auth_update.update 1 $delay.who auth_update.update } return } if (*.users.quakenet.org iswm $site) { auth_update.nick $nick $gettok($site,1,46) | return } if ($hget(auths. $+ $cid,$nick) == $null) { auth.l.add.wid $chan($chan).wid $nick } elseif ($hget(auths. $+ $cid,$nick) == 0) { auth.q.add.wid $chan($chan).wid $nick if (!$comchan($nick,2)) { auth.q.add.main $nick } } if ($hget(auths.n. $+ $cid,$nick)) { auth.n.add.wid $chan($2).wid $nick } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RAW 366 - END OF NAMES LIST ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 366 Vliedel #vliedel :End of /NAMES list. RAW 366:& & end of /names list.:{ var %i = $nick($2,0) , %table = auths. $+ $cid , %table.n = auths.n. $+ $cid while (%i) { var %nick = $nick($2,%i) if ($hget(%table,%nick) == $null) { auth.l.add.wid $chan($2).wid %nick } elseif ($hget(%table,%nick) == 0) { auth.q.add.wid $chan($2).wid %nick if (!$comchan(%nick,2)) { auth.q.add.main %nick } } if ($hget(%table.n,%nick)) { auth.n.add.wid $chan($2).wid %nick } dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PART EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:PART:#:{ if ($nick == $me) { auth.rem.chan $chan auth.l.rem.chan.all $chan auth.q.rem.chan.all $chan auth.n.rem.chan.all $chan } else { auth.l.rem.wid $chan($chan).wid $nick auth.q.rem.wid $chan($chan).wid $nick auth.n.rem.wid $chan($chan).wid $nick if (!$comchan($nick,2)) { auth.rem $nick auth.q.rem.main $nick auth.n.rem.main $nick } elseif (*.users.quakenet.org iswm $site) { auth_update.nick $nick $gettok($site,1,46) } } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KICK EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:KICK:#:{ if ($knick == $me) { auth.rem.chan $chan auth.l.rem.chan.all $chan auth.q.rem.chan.all $chan auth.n.rem.chan.all $chan } else { auth.l.rem.wid $chan($chan).wid $knick auth.q.rem.wid $chan($chan).wid $knick auth.n.rem.wid $chan($chan).wid $knick if (!$comchan($knick,2)) { auth.rem $knick auth.q.rem.main $knick auth.n.rem.main $knick } if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QUIT EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:QUIT:{ auth.rem $nick auth.l.rem $nick auth.q.rem $nick auth.n.rem $nick } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NICK EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:NICK:{ auth.nick $nick $newnick auth.l.nick $nick $newnick auth.q.nick $nick $newnick auth.n.nick $nick $newnick if (*.users.quakenet.org iswm $site) { auth_update.nick $newnick $gettok($site,1,46) } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IAL-UPDATING EVENTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:TEXT:*:*:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } on *:ACTION:*:*:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } on *:NOTICE:*:*:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } on *:RAWMODE:#:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } on *:TOPIC:#:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } on *:INVITE:#:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } CTCP *:*:*:{ if (*.users.quakenet.org iswm $site) && ($comchan($nick,1)) { auth_update.nick $nick $gettok($site,1,46) } } RAW 352:& & & & & & & & *: { if (*.users.quakenet.org iswm $4) && ($comchan($6,1)) { auth_update.nick $6 $gettok($4,1,46) } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DISCONNECT EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:DISCONNECT:{ if ($hget(auths.u $+ $cid)) { hfree $v1 } if ($hget(auths. $+ $cid)) { hfree $v1 } if ($hget(auths.q. $+ $cid)) { hfree $v1 } if ($hget(auths.l. $+ $cid)) { hfree $v1 } if ($hget(auths.n. $+ $cid)) { hfree $v1 } } ; 200 ; auths.cid nick --> auth ; 200 ; auths.l.cid chanwid.nick --> lnick rnick ; auths.l.cid chanwid.-firstnick --> first_nick_in_list ; auths.l.cid chanwid.-lastnick --> last_nick_in_list ; 200 ; auths.q.cid chanwid.nick --> ctime lnick rnick ; auths.q.cid chanwid.-firstnick --> first_nick_in_queue ; auths.q.cid chanwid.-lastnick --> last_nick_in_queue ; auths.q.cid nick --> ctime ; 100 ; auths.n.cid chanwid.nick --> lnick rnick ; auths.n.cid chanwid.-firstnick --> first_nick_in_list ; auths.n.cid chanwid.-lastnick --> last_nick_in_list ; auths.n.cid nick --> lnick rnick ; auths.n.cid -firstnick --> first_nick_in_list ; auths.n.cid -lastnick --> last_nick_in_list ; --------------------------------------------------------------------------------------------- ; --------------------------------------- AUTHS - TABLE --------------------------------------- ; --------------------------------------------------------------------------------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.ADD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.add { ; $1 = nick $2 = auth if (!$hget(auths. $+ $cid)) { return } hadd auths. $+ $cid $1 $2 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.REM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.rem { ; $1 = nick if (!$hget(auths. $+ $cid)) { return } hdel auths. $+ $cid $1 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.REM.CHAN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.rem.chan { ; $1 = chan if (!$hget(auths. $+ $cid)) { return } var %i = $nick($1,0) while (%i) { if (!$comchan($nick($1,%i),2)) { hdel auths. $+ $cid $nick($1,%i) } dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.NICK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.nick { ; $1 = nick $2 = newnick if ($hget(auths. $+ $cid,$1) !== $null) { hdel auths. $+ $cid $1 | hadd auths. $+ $cid $2 $v1 } } ; ---------------------------------------------------------------------------------------------------- ; --------------------------------------- AUTHS - LEFT - TABLE --------------------------------------- ; ---------------------------------------------------------------------------------------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.L.ADD.WID ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.l.add.wid { ; $1 = wid $2 = nick var %table = auths.l. $+ $cid if (!$hget(%table)) { return } var %id = $1 $+ . , %lastnick = $hget(%table,%id $+ -lastnick) if ($hget(%table,%id $+ $2)) { return } if (%lastnick) { hadd %table %id $+ $2 %lastnick 0 hadd %table %id $+ %lastnick $gettok($hget(%table,%id $+ %lastnick),1,32) $2 } else { hadd %table %id $+ $2 0 0 hadd %table %id $+ -firstnick $2 } hadd %table %id $+ -lastnick $2 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.L.REM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.l.rem { ; $1 = nick if (!$hget(auths.l. $+ $cid)) { return } var %i = $comchan($1,0) while (%i) { auth.l.rem.wid $chan($comchan($1,%i)).wid $1 dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.L.REM.WID ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.l.rem.wid { ; $1 = wid $2 = nick var %table = auths.l. $+ $cid if (!$hget(%table)) { return } var %id = $1 $+ . , %val = $hget(%table,%id $+ $2) if (!%val) { return } var %nick.l = $gettok(%val,1,32) , %nick.r = $gettok(%val,2,32) hdel %table %id $+ $2 if (%nick.l == 0) && (%nick.r == 0) { hdel %table %id $+ -lastnick | hdel %table %id $+ -firstnick | return } if (%nick.l !== 0) { hadd %table %id $+ %nick.l $gettok($hget(%table,%id $+ %nick.l),1,32) %nick.r } else { hadd %table %id $+ -firstnick %nick.r } if (%nick.r !== 0) { hadd %table %id $+ %nick.r %nick.l $gettok($hget(%table,%id $+ %nick.r),2,32) } else { hadd %table %id $+ -lastnick %nick.l } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.L.REM.CHAN.ALL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.l.rem.chan.all { ; $1 = chan if (!$hget(auths.l. $+ $cid)) { return } hdel -w auths.l. $+ $cid $chan($1).wid $+ .* } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.L.NICK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.l.nick { ; $1 = nick $2 = newnick if ($1 == $2) { return } var %table = auths.l. $+ $cid if (!$hget(%table)) { return } var %i = $comchan($2,0) while (%i) { var %id = $chan($comchan($2,%i)).wid $+ . , %val = $hget(%table,%id $+ $1) if (%val) { hdel %table %id $+ $1 hadd %table %id $+ $2 %val var %nick.l = $gettok(%val,1,32) , %nick.r = $gettok(%val,2,32) if (%nick.l !== 0) { hadd %table %id $+ %nick.l $gettok($hget(%table,%id $+ %nick.l),1,32) $2 } else { hadd %table %id $+ -firstnick $2 } if (%nick.r !== 0) { hadd %table %id $+ %nick.r $2 $gettok($hget(%table,%id $+ %nick.r),2,32) } else { hadd %table %id $+ -lastnick $2 } } dec %i } } ; ----------------------------------------------------------------------------------------------------- ; --------------------------------------- AUTHS - QUEUE - TABLE --------------------------------------- ; ----------------------------------------------------------------------------------------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.ADD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.add { ; $1 = nick if (!$hget(auths.q. $+ $cid)) { return } auth.q.add.main $1 var %i = $comchan($1,0) while (%i) { auth.q.add.wid $chan($comchan($1,%i)).wid $1 dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.ADD.WID ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.add.wid { ; $1 = wid $2 = nick var %table = auths.q. $+ $cid if (!$hget(%table)) { return } var %id = $1 $+ . , %ctime = $iif($hget(%table,$2) == $null,$ctime,$v1) auth.q.rem.wid $1 $2 var %lastnick = $hget(%table,%id $+ -lastnick) if (!%lastnick) { hadd %table %id $+ $2 %ctime 0 0 hadd %table %id $+ -firstnick $2 hadd %table %id $+ -lastnick $2 return } if (%ctime >= $hget(%table,%lastnick)) { hadd %table %id $+ $2 %ctime %lastnick 0 hadd %table %id $+ %lastnick $gettok($hget(%table,%id $+ %lastnick),1-2,32) $2 hadd %table %id $+ -lastnick $2 return } var %n = $hget(%table,%id $+ -firstnick) , %nick = $2 while (%n) { tokenize 32 $hget(%table,%id $+ %n) if (%ctime <= $1) { hadd %table %id $+ %n $1 %nick $3 if ($2 == 0) { hadd %table %id $+ %nick %ctime 0 %n hadd %table %id $+ -firstnick %nick } else { hadd %table %id $+ %nick %ctime $2 %n hadd %table %id $+ $2 $gettok($hget(%table,%id $+ $2),1-2,32) %nick } break } var %n = $3 } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.ADD.MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.add.main { ; $1 = nick if (!$hget(auths.q. $+ $cid)) { return } hadd auths.q. $+ $cid $1 $ctime } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.REM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.rem { ; $1 = nick if (!$hget(auths.q. $+ $cid)) { return } var %i = $comchan($1,0) while (%i) { auth.q.rem.wid $chan($comchan($1,%i)).wid $1 dec %i } auth.q.rem.main $1 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.REM.WID ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.rem.wid { ; $1 = wid $2 = nick var %table = auths.q. $+ $cid if (!$hget(%table)) { return } var %id = $1 $+ . , %val = $hget(%table,%id $+ $2) if (!%val) { return } var %nick.l = $gettok(%val,2,32) , %nick.r = $gettok(%val,3,32) hdel %table %id $+ $2 if (%nick.l == 0) && (%nick.r == 0) { hdel %table %id $+ -lastnick | hdel %table %id $+ -firstnick | return } if (%nick.l !== 0) { hadd %table %id $+ %nick.l $gettok($hget(%table,%id $+ %nick.l),1-2,32) %nick.r } else { hadd %table %id $+ -firstnick %nick.r } if (%nick.r !== 0) { hadd %table %id $+ %nick.r $gettok($hget(%table,%id $+ %nick.r),1,32) %nick.l $gettok($hget(%table,%id $+ %nick.r),3,32) } else { hadd %table %id $+ -lastnick %nick.l } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.REM.MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.rem.main { ; $1 = nick if (!$hget(auths.q. $+ $cid)) { return } hdel auths.q. $+ $cid $1 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.REM.CHAN.ALL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.rem.chan.all { ; $1 = chan var %table = auths.q. $+ $cid if (!$hget(%table)) { return } hdel -w %table $chan($1).wid $+ .* var %i = $nick($1,0) while (%i) { if (!$comchan($nick($1,%i),2)) { hdel %table $nick($1,%i) } dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.Q.NICK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.q.nick { ; $1 = nick $2 = newnick if ($1 == $2) { return } var %table = auths.q. $+ $cid if (!$hget(%table)) { return } var %i = $comchan($2,0) while (%i) { var %id = $chan($comchan($2,%i)).wid $+ . , %val = $hget(%table,%id $+ $1) if (%val) { hdel %table %id $+ $1 hadd %table %id $+ $2 %val var %nick.l = $gettok(%val,2,32) , %nick.r = $gettok(%val,3,32) if (%nick.l !== 0) { hadd %table %id $+ %nick.l $gettok($hget(%table,%id $+ %nick.l),1-2,32) $2 } else { hadd %table %id $+ -firstnick $2 } if (%nick.r !== 0) { hadd %table %id $+ %nick.r $gettok($hget(%table,%id $+ %nick.r),1,32) $2 $gettok($hget(%table,%id $+ %nick.r),3,32) } else { hadd %table %id $+ -lastnick $2 } } dec %i } if ($hget(%table,$1) !== $null) { hdel %table $1 | hadd %table $2 $v1 } } ; ---------------------------------------------------------------------------------------------------- ; --------------------------------------- AUTHS - NEXT - TABLE --------------------------------------- ; ---------------------------------------------------------------------------------------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.ADD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.add { ; $1 = nick if (!$hget(auths.n. $+ $cid)) { return } auth.n.add.main $1 var %i = $comchan($1,0) while (%i) { auth.n.add.wid $chan($comchan($1,%i)).wid $1 dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.ADD.WID ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.add.wid { ; $1 = wid $2 = nick var %table = auths.n. $+ $cid if (!$hget(%table)) { return } var %id = $1 $+ . , %lastnick = $hget(%table,%id $+ -lastnick) if ($hget(%table,%id $+ $2)) { return } if (%lastnick) { hadd %table %id $+ $2 %lastnick 0 hadd %table %id $+ %lastnick $gettok($hget(%table,%id $+ %lastnick),1,32) $2 } else { hadd %table %id $+ $2 0 0 hadd %table %id $+ -firstnick $2 } hadd %table %id $+ -lastnick $2 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.ADD.MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.add.main { ; $1 = nick var %table = auths.n. $+ $cid if (!$hget(%table)) { return } var %lastnick = $hget(%table,-lastnick) if ($hget(%table,$1)) { return } if (%lastnick) { hadd %table $1 %lastnick 0 hadd %table %lastnick $gettok($hget(%table,%lastnick),1,32) $1 } else { hadd %table $1 0 0 hadd %table -firstnick $1 } hadd %table -lastnick $1 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.REM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.rem { ; $1 = nick if (!$hget(auths.n. $+ $cid)) { return } var %i = $comchan($1,0) while (%i) { auth.n.rem.wid $chan($comchan($1,%i)).wid $1 dec %i } auth.n.rem.main $1 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.REM.WID ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.rem.wid { ; $1 = wid $2 = nick var %table = auths.n. $+ $cid if (!$hget(%table)) { return } var %id = $1 $+ . , %val = $hget(%table,%id $+ $2) if (!%val) { return } var %nick.l = $gettok(%val,1,32) , %nick.r = $gettok(%val,2,32) hdel %table %id $+ $2 if (%nick.l == 0) && (%nick.r == 0) { hdel %table %id $+ -lastnick | hdel %table %id $+ -firstnick | return } if (%nick.l !== 0) { hadd %table %id $+ %nick.l $gettok($hget(%table,%id $+ %nick.l),1,32) %nick.r } else { hadd %table %id $+ -firstnick %nick.r } if (%nick.r !== 0) { hadd %table %id $+ %nick.r %nick.l $gettok($hget(%table,%id $+ %nick.r),2,32) } else { hadd %table %id $+ -lastnick %nick.l } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.REM.MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.rem.main { ; $1 = nick var %table = auths.n. $+ $cid if (!$hget(%table)) { return } var %val = $hget(%table,$1) if (!%val) { return } var %nick.l = $gettok(%val,1,32) , %nick.r = $gettok(%val,2,32) hdel %table $1 if (%nick.l == 0) && (%nick.r == 0) { hdel %table -lastnick | hdel %table -firstnick | return } if (%nick.l !== 0) { hadd %table %nick.l $gettok($hget(%table,%nick.l),1,32) %nick.r } else { hadd %table -firstnick %nick.r } if (%nick.r !== 0) { hadd %table %nick.r %nick.l $gettok($hget(%table,%nick.r),2,32) } else { hadd %table -lastnick %nick.l } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.REM.CHAN.ALL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.rem.chan.all { ; $1 = chan var %table = auths.n. $+ $cid if (!$hget(%table)) { return } hdel -w %table $chan($1).wid $+ .* var %i = $nick($1,0) while (%i) { if (!$comchan($nick($1,%i),2)) { auth.n.rem.main $nick($1,%i) } dec %i } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS AUTH.N.NICK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l auth.n.nick { ; $1 = nick $2 = newnick if ($1 == $2) { return } var %table = auths.n. $+ $cid if (!$hget(%table)) { return } var %i = $comchan($2,0) while (%i) { var %id = $chan($comchan($2,%i)).wid $+ . , %val = $hget(%table,%id $+ $1) if (%val) { hdel %table %id $+ $1 hadd %table %id $+ $2 %val var %nick.l = $gettok(%val,1,32) , %nick.r = $gettok(%val,2,32) if (%nick.l !== 0) { hadd %table %id $+ %nick.l $gettok($hget(%table,%id $+ %nick.l),1,32) $2 } else { hadd %table %id $+ -firstnick $2 } if (%nick.r !== 0) { hadd %table %id $+ %nick.r $2 $gettok($hget(%table,%id $+ %nick.r),2,32) } else { hadd %table %id $+ -lastnick $2 } } dec %i } var %val = $hget(%table,$1) if (%val) { hdel %table $1 hadd %table $2 %val var %nick.l = $gettok(%val,1,32) , %nick.r = $gettok(%val,2,32) if (%nick.l !== 0) { hadd %table %nick.l $gettok($hget(%table,%nick.l),1,32) $2 } else { hadd %table -firstnick $2 } if (%nick.r !== 0) { hadd %table %nick.r $2 $gettok($hget(%table,%nick.r),2,32) } else { hadd %table -lastnick $2 } } }