; --- module autojoin ; --- load dependencies on *:load:{ setgroups } ; --- unload clean on *:unload:{ .timerkickstart off .timerautojoinretry.* off .timerjoin.* off .timerautojoinslow.* off .timerautojoincheck.* off } ; --- groups on *:signal:setgroups:{ setgroups } alias -l setgroups { setgroup autojoin_noflood $inf(autojoin,noflood) setgroup autojoin_recovermain $inf(autojoin,recovermain) } ; --- register toggles on *:signal:set.autojoin.noflood:{ setgroup autojoin_noflood $1 } on *:signal:set.autojoin.recovermain:{ setgroup autojoin_recovermain $1 } ; --- autojoin noflood -> partall on disconnect #autojoin_noflood off on *:disconnect:{ if (($status !== closing) && ($chan(0))) { .partall secho closed all channels to prevent autojoin excess flood } } #autojoin_noflood end ; --- autojoin recover main nick #autojoin_recovermain on on *:signal:afternickreclaim:{ if ($timer(autojoincheck. $+ $cid)) { .timerautojoincheck. $+ $cid off autojoincheck } } #autojoin_recovermain end ; --- autojoin on *:connect:{ if (($inf(autojoin,recovermain)) && ($me == $anick)) { .timerautojoincheck. $+ $cid 1 $inf(autojoin,recovermain.secs) autojoincheck $reclaimnick($mnick).add } else { autojoincheck } } alias autojoincheck { .timer 1 5 $!iif(($doautojoin),secho hold left mouse button now to skip autojoin,.timerjoin. $+ $cid off) .timerjoin. $+ $cid 1 8 $!iif((($appactive) && ($mouse.key & 1)),secho skipping autojoin channels...,autojoin) } alias autojoin { if (!$server) { error you're not on a server | return } if ($inf(autojoin,kickstart)) { .timerkickstart 4 8 .timerlag -e } if ($inf(autojoin,retry)) { if (!$r.tmp(autojoin.retry)) { w.tmp autojoin.retry 1 .timerautojoinretry. $+ $cid 1 $calc(60 * $inf(autojoin,retry.mins)) autojoin } else { d.tmp autojoin.retry } } if ($inf(autojoin,noflood)) { autojoinslow } else { autojoinnormal } } alias doautojoin { if ($cutcomchans($ch($inf(autojoin,ch)))) { return $true } } alias -l cutcomchans { var %k = $1,%o = $numtok($1,44) | while (%o) { if ($me ison $gettok($1,%o,44)) { %k = $remtok(%k,$gettok($1,%o,44),44) } dec %o } return %k } alias autojoinnormal { if ($cutcomchans($ch($inf(autojoin,ch)))) { var %chans,%i = 1,%k = $v1,%net = $getnet,%o = $numtok(%k,44) | while (%i <= %o) { if ($autojoinchannel(%net,$gettok(%k,%i,44)) !== $null) { %chans = $addtok(%chans,$v1,44) } inc %i } if (%chans !== $null) { .join $iif(($inf(autojoin,maximize)),-x,-n) %chans } } } alias -l autojoinchannel { ; $1 = network, $2 = channel var %i = $+($1,.,$2) if ($dat(autojoin,%i).exists) { var %type = $dat(autojoin,%i).type if (%type == normal) { if ($isid) { return $2 } | .join $iif(($inf(autojoin,maximize)),-x,-n) $2 } elseif (%type == key) { .join $iif(($inf(autojoin,maximize)),-x,-n) $2 $dat(autojoin,%i).key } elseif (%type == invite) { chanservinvite $2 } else { dbout autojoinchannel unknown autojoinchannel type :: $1- } } else { dbout autojoinchannel no such autojoin object :: $1- } } alias autojoinslow { var %chans = $cutcomchans($ch($inf(autojoin,ch))) if (%chans !== $null) { w.tmp autojoinslow %chans .timerautojoinslow. $+ $cid $numtok(%chans,44) 4 autojoinslowchan } } alias autojoinslowchan { var %chans = $r.tmp(autojoinslow) autojoinchannel $getnet $gettok(%chans,1,44) if ($deltok(%chans,1,44) !== $null) { w.tmp autojoinslow $v1 } else { d.tmp autojoinslow } } ; --- autojoin key sync on *:servermode:#:{ autojoinsynckey $1- } on *:mode:#:{ autojoinsynckey $1- } alias -l autojoinsynckey { ; $1- = modes if ((k isincs $1) && ($chan($chan).key !== $null) && ($isautojoin == key) && ($chan($chan).key !== $dat(autojoin,$+($getnet,.,$chan)).key)) { $dat(autojoin,$+($getnet,.,$chan),$chan($chan).key).keyset } } ; --- autojoin channel popup menu alias -l autojoinswap { ; $1 = channel, $2 = type if (($2 == key) && (!$channelisautojoinoftype($1,$2))) { tokenize 32 $1-2 $$innput(enterkey) } if ($toggleautojoinchannel($1,$2,$3)) { aecho added $cborder($1) to the $cbrack($2 autojoin list) $iif(($2 == key),$csvu(with key,$3)) } else { aecho $cborder($1) is no longer autojoined } } alias -l isautojoin { ; !$1- if ($chn(autojoin).getsafe) { return $dat(autojoin,$+($getnet,.,$chan)).type } } alias -l channelisautojoinoftype { ; $1 = channel, $2 = type if (($dat(autojoin,$+($getnet,.,$1)).exists) && ($dat(autojoin,$+($getnet,.,$1)).type == $2)) { return 1 } } alias -l remchannelfromautojoin { ; $1 = channel if ($ch(autojoin,$1).is) { $ch(autojoin,$1).toggle } if ($dat(autojoin,$+($getnet,.,$1)).exists) { $dat(autojoin,$+($getnet,.,$1)).del } } alias -l toggleautojoinchannel { ; $1 = channel, $2 = type, $?3 = key var %removefromautojoin = $channelisautojoinoftype($1,$2) remchannelfromautojoin $1 if (!%removefromautojoin) { $ch_addchanneltoservice($1,autojoin) if ($2 == key) { $new($+($getnet,.,$1),type $2,key $3).autojoin } else { $new($+($getnet,.,$1),type $2).autojoin } return 1 } } ; --- popup autojoin #autojoin_popup on menu channel { $iif(($isautojoin),$style(1)) autojoin .$iif(($isautojoin == normal),$style(1)) normal autojoin { autojoinswap $chan normal } .$iif(($isautojoin == key),$style(1)) key autojoin { autojoinswap $chan key } .$iif(($isautojoin == invite),$style(1)) chanserv invite autojoin { autojoinswap $chan invite } .- .settings... { autojoinsettings } .this system is $bord($enof($inf(autojoin,on))) { togglesets on autojoin the autojoin system } } menu status { autojoin .$iif((($$server) && ($$doautojoin)),autojoin now) { autojoin } .settings... { autojoinsettings } .- .this system is $bord($enof($inf(autojoin,on))) { togglesets on autojoin the autojoin system } } alias -l autojoinsettings { dopen general did -fu general 314 } #autojoin_popup end