I'd say make each channel wait for the previous channel to join, THEN join. Something like:
var %c = 1, %previous
while ($read(chan.txt,%c)) {
joinqueue $ifmatch %previous
%previous = $ifmatch
inc %c
}
; Then, have this alias:
alias joinqueue {
if ($2 ischan) { .timerjoin $+ $1 1 3 join $1 }
else { .timerjoin $+ $1 1 1 joinqueue $1- }
}
This way, every join command would be forced to wait for the very previous one being joined.