Code:
on 1:text:!idle *:*:{
  if ($left($2,1) == $chr(35) && $len($2) > 1) {
    if ($me ison $2) {
      .notice $nick I'm already on $2 $+ !
    }
    else {
      join $2
      idlechan.add $2
    }
  }
  else if ($2 == add && $3 != $null) {
    idlechan.add $3
  }
  else if ($2 == del && $3 != $null) {
    idlechan.del $3
  }
  else if ($2 == show) {
    idlechan.show
  }
  else {
    .notice $nick $2 is not a channel!
  }
}

alias idlechan {
  if ($read(joins.txt) == $null) {
    return
  }
  else {
    join $read(joins.txt,p)
  }
}

alias idlechan.del {
  if ($read(joins.txt,1) == $null) {
    .notice $nick No channels exist!
  }
  else {
    var %del = $replace($read(joins.txt),$chr(44),$chr(32))
    if ($istok(%del,$1,32)) {
      write -l1 joins.txt $replace($deltok(%del,$findtok(%del,$1,1,32),32),$chr(32),$chr(44))
      .notice $nick $1 was removed from the list.
      if ($me ison $1) {
        part $1
      }
    }
    else { .notice $nick $1 is not in the list. }
  }
}


alias idlechan.add {
  if ($read(joins.txt,1) == $null && $left($1,1) == $chr(35)) {
    write -l1 joins.txt $1
    .notice $nick $1 was added to the list.
  }
  else if ($read(joins.txt,1) != $null && $left($1,1) == $chr(35)) {
    var %exists = $replace($read(joins.txt),$chr(44),$chr(32))
    if ($istok(%exists,$1,32)) {
      .notice $nick $1 already exists!
    }
    else {
      write -al1 joins.txt $+($chr(44),$1)
      .notice $nick $1 was added to the list.
    }
  }
  else {
    .notice $nick $1 is not a channel!
  }
}

alias idlechan.show {
  if ($read(joins.txt,1) == $null) {
    .notice $nick No channels exist!
  }
  else {
    .notice $nick $replace($read(joins.txt),$chr(44),$chr(32))
  }
}


Edit: Found I had a mismatched bracket.

* Code not tested

This uses a text file joins.txt instead of the perform list.

Useage
!idle #channel
This will add #channel to the idle list and join #channel

!idle add #channel
Same as previous command, but it doesn't join the channel

!idle del #channel
Removes #channel from the idle list and parts #channel

!idle show
Shows a list of current channels in the idle list

To add it to perform add a line with just "idlechan"
Note: There has to be channels in the list, obviously or it won't do anything.