1.
Code:
on @$*:TEXT:/^[\(\)\[\]]*(#[^\s,]*)[\.!\?\(\)\[\]]*$/i:#: {
  if (($me isop $chan) && ($nick !isop $chan)) {
    /inc -u300 %adv. [ $+ [ $chan ] $+ . $+ [ $nick ] ]
    var %count = %adv. [ $+ [ $chan ] $+ . $+ [ $nick ] ]
    if (%count < 3) /msg $chan $nick $+ , please do not advertise in here. $iif(%count == 3, - Last Warning -)
    else if (%count < 4) /kick $chan $nick Do not advertise in here
    else if (%count < 5) {
      /mode $chan +bb $nick $address($nick, 11)
      .timer 1 30 mode $chan -bb $nick $address($nick, 11)
      /kick $chan $nick Do not advertise in here (banned 30s)
    }
    else {
      /mode $chan +bb $nick $address($nick, 11)
      .timer 1 1800 mode $chan -bb $nick $address($nick, 11)
      /kick $chan $nick Do not advertise in here (banned!)
    }
  }
}

That will kick people who announce a channel in yours. It will give them two warnings first, kick the third, ban (30 secs) the fourth, and ban (half hour) the fifth.

2. Ban 'protection' as you put it is possible by a few ways. Your better off though using channel services if you have it available, and add your name to the access list. Then, only give *special* users op and the rest maybe halfop or voice. Alternativly, this will do what you're looking for:

Code:
on @*:BAN:#: {
  if ($bnick == $me || $banmask iswm $address($me,5)) {
    /kick $chan $nick No takeovers!
    /mode $chan -bb+bb $me $banmask $nick $address($nick,2)
  }
}


Very simple, but should work.


-KingTomato