#by wiebe @ QuakeNet
#when a netsplit happens, the bot ops all users with the N flag on channels where +netsplitop is set

setudef flag netsplitop

bind splt - * netsplitop:split

proc netsplitop:split { nick uhost handle chan } {
  if { ![validchan $chan] } { return }
  if { ![isop $nick $chan] } { return }
  if { [channel get $chan netsplitop] && [botisop $chan] } {
    foreach n [chanlist $chan N|N] {
      if { ![isop $n $chan] && $n != $nick && ![onchansplit $n $chan] && ![matchattr [nick2hand $n] d|d $chan] } {
        pushmode $chan +o $n
      }
    }
  }
}

bind sign - "% Q!TheQBot@CServe.quakenet.org" netsplitop:quit
bind sign - "% L!TheLBot@CServe.quakenet.org" netsplitop:quit

proc netsplitop:quit { nick uhost handle chan reason } {
  if { ![validchan $chan] } { return }
  if { ![isop $nick $chan] } { return }
  if { [channel get $chan netsplitop] && [botisop $chan] } {
    foreach n [chanlist $chan N|N] {
      if { ![isop $n $chan] && $n != $nick && ![onchansplit $n $chan] && ![matchattr [nick2hand $n] d|d $chan] } {
        pushmode $chan +o $n
      }
    }
  }
}

bind part - "% Q!TheQBot@CServe.quakenet.org" netsplitop:part
bind part - "% L!TheLBot@CServe.quakenet.org" netsplitop:part

proc netsplitop:part { nick uhost handle chan {msg ""} } {
  if { ![validchan $chan] } { return }
  if { ![isop $nick $chan] } { return }
  if { [channel get $chan netsplitop] && [botisop $chan] } {
    foreach n [chanlist $chan N|N] {
      if { ![isop $n $chan] && $n != $nick && ![onchansplit $n $chan] && ![matchattr [nick2hand $n] d|d $chan] } {
        pushmode $chan +o $n
      }
    }
  }
}
