rendered paste body; --- 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