1) Remove the ON JOIN event

2) No, it doesn't, but that is the easiest place. If you put it somewhere else, you'll have to specify the full directory with the file name in the code, remembering that if there are any spaces in the directory name (and/or any of the sub-directories), you'll have to enclose the entire thing in quotation marks.

3) You must be, however, I'm at a loss to explain it, as there is nothing in the code that references the User tab.

4) Worked on this code, for a dialog/remote based access, however, it has been reported to crash a system running Win2K.
I don't have a Win2k system, so I'm unable to test it with that configuration. I did run it for about 4 hours on a P4 1.7Ghz with 512M ram and Windows XP Home, without any difficulties.

Code:
 ;Dialog items
dialog bad_channel {
  title "Bad Channel Ban"
  size -1 -1 149 125
  option dbu
  text "Bad Channels", 1, 10 10 60 8, center
  combo 2, 10 20 60 100, drop sort size edit
  box "Exemptions", 3, 73 6 37 40
  check "Ops", 4, 75 13 30 8
  check "Half-Ops", 5, 75 21 30 8
  check "Voice", 6, 75 29 30 8
  check "Regular", 7, 75 37 30 8
  check "Timed Check", 8, 73 50 40 8
  edit "", 9, 73 60 40 10
  button "Check Now", 10, 115 10 30 10
  button "Apply", 11, 115 20 30 10
  button "Close", 12, 115 30 30 10, cancel
}
on *:dialog:bad_channel:init:*:{
  channels
}
on *:dialog:bad_channel:sclick:2:{
  var %chan = $did(2).seltext, %timed = $gettok($hget(bad_channel,%chan),1,32), %exempt = $gettok($hget(bad_channel,%chan),2,32)
  did $iif(%timed,-c,-u) $dname 8
  did $iif(%timed,-evra,-bhr) $dname 9 $duration(%timed,3)
  did $iif($mid(%exempt,1,1) == o,-c,-u) $dname 4
  did $iif($mid(%exempt,2,1) == h,-c,-u) $dname 5
  did $iif($mid(%exempt,3,1) == v,-c,-u) $dname 6
  did $iif($mid(%exempt,4,1) == r,-c,-u) $dname 7
}
on *:dialog:bad_channel:dclick:2:{
  .hdel bad_channel $did(2).seltext
  .channels
}
on *:dialog:bad_channel:sclick:8:{
  did -r $+ $iif($did(8).state,ev,bh) $dname 9
}
on *:dialog:bad_channel:sclick:11:{
  if $did(8).state {
    var %time = $iif($did(9) isnum,$calc($did(9) * 60),$iif($chr(58) isin $did(9),$duration($did(9))))
    $+(.timer,bad_channel_check,.,$cid,.,$chan) 0 %time bad.channel $chan
  }
  var %exempt
  if $did(4).state {    %exempt = o  }
  if $did(5).state {    %exempt = %exempt $+ h  }
  if $did(6).state {    %exempt = %exempt + v  }
  if $did(7).state {    %exempt = %exempt + r  }
  .hadd -m bad_channel $did(2) $iif(%time,$v1,0) $+($did(4).state,$did(5).state,$did(6).state,$did(7).state)
  .channels
}

;Aliases
alias -l channels {
  did -bhr bad_channel 9
  did -u bad_channel 4-8
  did -r bad_channel 2
  var %a = 1, %b = $hget(bad_channel,0).item
  while %a <= %b {
    did -a bad_channel 2 $hget(bad_channel,%a).item
    inc %a
  }
}
alias -l bad.channel {
  if $me isop $1 {
    var %exempt = $gettok($hget(bad_channel,%chan),2,32), %a = 1
    while %a <= $nick($1,0,a,%exempt) {
      .enable #bad.chan.whois
      .whois $nick($1,%a,a,%exempt)
      inc %a
    }
  }
}

;Groups
#bad.chan.whois off
raw 318:*:{
  .disable #bad.chan.whois
  haltdef
}
raw 319:*:{
  var %b = 1, %c = $numtok($3-,32)
  while %b <= %c {
    if $hfind(bad_channel,$gettok($3-,%b,32)) && ($me isop %chan) {
      .ban -k %chan $2 2 Bad Channels detected
    }
    inc %b
  }
}
#bad.chan.whois end

;Ops remote access
on op:text:!list:*:{
  var %a = 1, %b = $hget(bad_channel,0).item
  while %a <= %b {
    var %chan = $hget(bad_channel,%a).data
    .timer 1 %a .msg $nick $hget(bad_channel,%a).item $duration($gettok(%chan,1,32),3) $gettok(%chan,2,32)
    inc %a
  }
}
on op:text:!add*:*:{
  if !$2 {
    .msg $nick Format is !add <channel> <timing> <exemption status>
    .msg $nick ....
    halt
  }
  if !$3 || $3 !isnum || $chr(58) !isin $3 {
    .msg $nick <timing> must be in minutes or hh:mm:ss format
    .msg $nick Use 0 if no automatic check is to be used
    .msg $nick ....
    halt
  }
  if !$4 {
    .msg $nick <exemption status> must be in ohvr format
    .msg $nick any or all of those are valid
    .msg $nick ....
    halt
  }
  .hadd -m bad_channel $2 $iif($3 isnum,$calc(60 * $3),$iif($chr(58) isin $3,$duration($3),0)) $4
  if $gettok($hget(bad_channel,$2),1,32) {
    $+(.timer,bad_channel_check,.,$cid,.,$2) 0 $v1 bad.channel $2
  }
}
on op:text:!remove*:*:{
  if !$2 {
    .msg $nick Format is !remove <channel> <timing> <exemption status>
    .msg $nick <timing> and <exemption status> are optional
    .msg $nick Use 0 for <timing> to turn it off and change the exemption status
    .msg $nick <exemption status> must be in ohvr format
    .msg $nick any or all of those are valid
    .msg $nick ....
  }
  elseif $3 == $null {
    $+(.timer,bad_channel_check,.,$cid,.,$2) off
    .hdel bad_channel $2
    .msg $nick $2 has been removed
  }
  elseif $3 == 0 && $4 {
    $+(.timer,bad_channel_check,.,$cid,.,$2) off
    .hadd -m bad_channel $2 0 $remove($gettok($hget(bad_channel,$2),2,32),$4)
  }
  elseif !$4 {
    var %time = $iif($3 isnum,$calc(60 * $3),$iif($chr(58) isin $3,$duration($3),0))
    $+(.timer,bad_channel_check,.,$cid,.,$2) 0 %time bad.channel $2
  }
  else {
    var %time = $iif($3 isnum,$calc(60 * $3),$iif($chr(58) isin $3,$duration($3),0))
    .hadd -m bad_channel $2 %time $remove($gettok($hget(bad_channel,$2),2,32),$4)
    $+(.timer,bad_channel_check,.,$cid,.,$2) 0 %time bad.channel $2
  }
}

on !@*:join:#:{
  .enable #bad.chan.whois
  .whois $nick
}
menu nicklist,channel {
  Bad Channel Dialog : dialog $iif(!$dialog(bad_channel),-md,-ev) bad_channel bad_channel
}
on *:start:{
  if !$hget(bad_channel) { .hmake bad_channel 100 }
  if $exists(bad_channel.hsh) { .hload bad_channel bad_channel.hsh }
}
on *:disconnect:{
  .hsave -o bad_channel bad_channel.hsh
}
on *:exit:{
  .hsave -o bad_channel bad_channel.hsh
}
on *:op:#:{
  .auser -a op $opnick
}
on *:serverop:#:{
  .auser -a op $opnick
}
on op:nick:{
  .ruser op $nick
  .auser -a op $newnick
}