Cool Max.
The only thing I might recommend is to use perhaps only a single variable for each %cadchan(N) and %cadpass(N).
Since channel names and passwords can't have the 'comma' character (character #44) in them, you can perhaps use a few $gettok's to save yourself a few variables, though it may be more work than it is.
So never mind that. =/
The one thing that I'm confused about is:
on me:*:Join:%cadchan1: {
On 'me'? Never heard of that before. :O
Script looks good though.