#by wiebe @ QuakeNet



#default
set profile(default) {
  "chanmode +ntCNcu"
  "idle-kick 0" "stopnethack-mode 0" "aop-delay 5:30" "revenge-mode 0" "ban-time 240"
  "exempt-time 0" "invite-time 0"

  -autohalfop -autovoice -autoop -bitch
  -cycle +dontkickops +dynamicbans -dynamicexempts
  -dynamicinvites -enforcebans -greet
  -nodesynch -protectfriends -protecthalfops -protectops
  -revenge -revengebot -secret -seen +shared
  -statuslog +userbans -userexempts -userinvites

  "flood-chan 10:30" "flood-ctcp 2:60" "flood-join 3:90" "flood-kick 0:0" "flood-deop 0:0"
  "flood-nick 5:120"

  -noseendata -quietseens -quietaiseens -nopubseens

  -censor -censor-pm -censor-instagib -censor-op -censor-hop -censor-voice
  "censor-bantime 0"

  -autolimit -autolimit-hidden
  "autolimit-delay 5" "autolimit-buffer 11" "autolimit-overhead 2" "autolimit-underhead 2"
  "autolimit-minimum 0" "autolimit-maximum 0"

  +term -term-noglobal -term-globaloverride +term-silent
  -term-nounknown -term-op -term-hop -term-voice
  -term-msg -term-share -term-redirect "term-flood 10" "term-redirectchan"

  -flood
  "flood.kick 13" "flood.ban 17" "flood.bantime 240"
  "flood.lock 10" "flood.locktime 2" "flood.text 2"
  "flood.action 4" "flood.length 60" "flood.short 5"
  "flood.urepeat 3" "flood.grepeat 2" "flood.caps 6"
  "flood.!count 5" "flood.?count 5" "flood.?!group 3"
  "flood.highlight 4" "flood.join 5" "flood.part 2"
  "flood.nick 5" "flood.lockmode mr"

  -clonecontrol "clonecontrol-max 2" "clonecontrol-bantime 60"

  -banlist -banlist-lock -banlist-msg
  "banlist-delay 5" "banlist-max 40" "banlist-lockmode i"

  -flyby "flyby-trigger 12" "flyby-bantime 20"

  -dnsbl -dnsbl-id -dnsbl-hide "dnsbl-url "

  -vb-ban -vb-hop "vb-time 240"

  -queue -queue-msg "queue-auto 0"

  -idle "idle-delay"
  -idle-deop "idle-deoptrigger" "idle-deopflags -|- b"
  -idle-dehop "idle-dehoptrigger" "idle-dehopflags"
  -idle-devoice "idle-devoicetrigger" "idle-devoiceflags -|-"
  -idle-voice "idle-voicetrigger" "idle-voiceflags -|- b"
  -idle-ban "idle-bantrigger" "idle-bantime" "idle-banmsg"

  -autovoiceall -autovoiceall-hidden
  "autovoiceall-delay 0" "autovoiceall-users 0" "autovoiceall-max 0"

  -nohostchange -noaway -netsplitop -fishbot -bitchvoice -rating +dnsdb
}



#clear
set profile(clear) {
  "chanmode +ntCN"
  "idle-kick 0" "stopnethack-mode 0" "aop-delay 5:30" "revenge-mode 0" "ban-time 0"
  "exempt-time 0" "invite-time 0"

  -autohalfop -autovoice -autoop -bitch
  -cycle +dontkickops +dynamicbans -dynamicexempts
  -dynamicinvites -enforcebans -greet
  -nodesynch -protectfriends -protecthalfops -protectops
  -revenge -revengebot -secret -seen +shared
  -statuslog +userbans -userexempts -userinvites

  "flood-chan 0:0" "flood-ctcp 0:0" "flood-join 0:0" "flood-kick 0:0" "flood-deop 0:0"
  "flood-nick 0:0"

  -noseendata -quietseens -quietaiseens -nopubseens

  -censor -censor-pm -censor-instagib -censor-op -censor-hop -censor-voice
  "censor-bantime 0"

  -autolimit -autolimit-hidden
  "autolimit-delay 0" "autolimit-buffer 0" "autolimit-overhead 0" "autolimit-underhead 0"
  "autolimit-minimum 0" "autolimit-maximum 0"

  -term -term-noglobal -term-globaloverride -term-silent
  -term-nounknown -term-op -term-hop -term-voice
  -term-msg -term-share -term-redirect "term-flood" "term-redirectchan"

  -flood
  "flood.kick 0" "flood.ban 0" "flood.bantime 0"
  "flood.lock 0" "flood.locktime 0" "flood.text 0"
  "flood.action 0" "flood.length 0" "flood.short 0"
  "flood.urepeat 0" "flood.grepeat 0" "flood.caps 0"
  "flood.!count 0" "flood.?count 0" "flood.?!group 0"
  "flood.highlight 0" "flood.join 0" "flood.part 0"
  "flood.nick 0" "flood.lockmode "

  -clonecontrol "clonecontrol-max 0" "clonecontrol-bantime 0"

  -banlist -banlist-lock -banlist-msg
  "banlist-delay 0" "banlist-max 0" "banlist-lockmode "

  -flyby "flyby-trigger 0" "flyby-bantime 0"

  -dnsbl -dnsbl-id -dnsbl-hide "dnsbl-url "

  -vb-ban -vb-hop "vb-time 0"

  -queue -queue-msg "queue-auto 0"

  -idle "idle-delay"
  -idle-deop "idle-deoptrigger" "idle-deopflags"
  -idle-dehop "idle-dehoptrigger" "idle-dehopflags"
  -idle-devoice "idle-devoicetrigger" "idle-devoiceflags"
  -idle-voice "idle-voicetrigger" "idle-voiceflags"
  -idle-ban "idle-bantrigger" "idle-bantime" "idle-banmsg"

  -autovoiceall -autovoiceall-hidden
  "autovoiceall-delay 0" "autovoiceall-users 0" "autovoiceall-max 0"

  -nohostchange -noaway -netsplitop -fishbot -bitchvoice -rating -dnsdb
}



#secret
set profile(secret) {
  "chanmode +stin"
  "idle-kick 0" "stopnethack-mode 0" "aop-delay 5:30" "revenge-mode 0" "ban-time 0"
  "exempt-time 0" "invite-time 0"

  -autohalfop -autovoice -autoop -bitch
  -cycle +dontkickops +dynamicbans -dynamicexempts
  -dynamicinvites -enforcebans -greet
  -nodesynch -protectfriends -protecthalfops -protectops
  -revenge -revengebot -secret -seen +shared
  -statuslog +userbans -userexempts -userinvites

  "flood-chan 0:0" "flood-ctcp 0:0" "flood-join 0:0" "flood-kick 0:0" "flood-deop 0:0"
  "flood-nick 0:0"

  +noseendata -quietseens -quietaiseens -nopubseens

  -censor -censor-pm -censor-instagib -censor-op -censor-hop -censor-voice
  "censor-bantime 0"

  -autolimit -autolimit-hidden
  "autolimit-delay 0" "autolimit-buffer 0" "autolimit-overhead 0" "autolimit-underhead 0"
  "autolimit-minimum 0" "autolimit-maximum 0"

  +term -term-noglobal -term-globaloverride +term-silent
  -term-nounknown -term-op -term-hop -term-voice
  -term-msg -term-share -term-redirect "term-flood 10" "term-redirectchan"

  -flood
  "flood.kick 0" "flood.ban 0" "flood.bantime 0"
  "flood.lock 0" "flood.locktime 0" "flood.text 0"
  "flood.action 0" "flood.length 0" "flood.short 0"
  "flood.urepeat 0" "flood.grepeat 0" "flood.caps 0"
  "flood.!count 0" "flood.?count 0" "flood.?!group 0"
  "flood.highlight 0" "flood.join 0" "flood.part 0"
  "flood.nick 0" "flood.lockmode "

  -clonecontrol "clonecontrol-max 0" "clonecontrol-bantime 0"

  -banlist -banlist-lock -banlist-msg
  "banlist-delay 0" "banlist-max 0" "banlist-lockmode "

  -flyby "flyby-trigger 0" "flyby-bantime 0"

  -dnsbl -dnsbl-id -dnsbl-hide "dnsbl-url "

  -vb-ban -vb-hop "vb-time 0"

  -queue -queue-msg "queue-auto 0"

  -idle "idle-delay"
  -idle-deop "idle-deoptrigger" "idle-deopflags"
  -idle-dehop "idle-dehoptrigger" "idle-dehopflags"
  -idle-devoice "idle-devoicetrigger" "idle-devoiceflags"
  -idle-voice "idle-voicetrigger" "idle-voiceflags"
  -idle-ban "idle-bantrigger" "idle-bantime" "idle-banmsg"

  -autovoiceall -autovoiceall-hidden
  "autovoiceall-delay 0" "autovoiceall-users 0" "autovoiceall-max 0"

  -nohostchange -noaway -netsplitop -fishbot -bitchvoice -rating +dnsdb
}



#public
set profile(public) {
  "chanmode +cCnNtu"
  "idle-kick 0" "stopnethack-mode 0" "aop-delay 5:30" "revenge-mode 0" "ban-time 240"
  "exempt-time 0" "invite-time 0"

  -autohalfop -autovoice -autoop -bitch
  -cycle +dontkickops +dynamicbans -dynamicexempts
  -dynamicinvites -enforcebans -greet
  -nodesynch -protectfriends -protecthalfops -protectops
  -revenge -revengebot -secret -seen +shared
  -statuslog +userbans -userexempts -userinvites

  "flood-chan 10:30" "flood-ctcp 2:60" "flood-join 3:90" "flood-kick 0:0" "flood-deop 0:0"
  "flood-nick 5:120"

  -noseendata -quietseens -quietaiseens -nopubseens

  +censor +censor-pm -censor-instagib +censor-op -censor-hop -censor-voice
  "censor-bantime 240"

  +autolimit -autolimit-hidden
  "autolimit-delay 3" "autolimit-buffer 11" "autolimit-overhead 2" "autolimit-underhead 2"
  "autolimit-minimum 15" "autolimit-maximum 0"

  +term -term-noglobal -term-globaloverride +term-silent
  -term-nounknown -term-op -term-hop -term-voice
  -term-msg -term-share -term-redirect "term-flood 10" "term-redirectchan"

  +flood
  "flood.kick 13" "flood.ban 17" "flood.bantime 240"
  "flood.lock 10" "flood.locktime 2" "flood.text 2"
  "flood.action 4" "flood.length 60" "flood.short 5"
  "flood.urepeat 3" "flood.grepeat 2" "flood.caps 6"
  "flood.!count 5" "flood.?count 5" "flood.?!group 3"
  "flood.highlight 4" "flood.join 5" "flood.part 2"
  "flood.nick 5" "flood.lockmode mr"

  +clonecontrol "clonecontrol-max 2" "clonecontrol-bantime 60"

  +banlist +banlist-lock +banlist-msg
  "banlist-delay 10" "banlist-max 40" "banlist-lockmode i"

  -flyby "flyby-trigger 0" "flyby-bantime 0"

  -dnsbl -dnsbl-id +dnsbl-hide "dnsbl-url "

  -vb-ban -vb-hop "vb-time 240"

  -queue -queue-msg "queue-auto 0"

  -idle "idle-delay"
  -idle-deop "idle-deoptrigger" "idle-deopflags -|- b"
  -idle-dehop "idle-dehoptrigger" "idle-dehopflags"
  -idle-devoice "idle-devoicetrigger" "idle-devoiceflags -|-"
  -idle-voice "idle-voicetrigger" "idle-voiceflags -|- b"
  -idle-ban "idle-bantrigger" "idle-bantime" "idle-banmsg"

  -autovoiceall -autovoiceall-hidden
  "autovoiceall-delay 0" "autovoiceall-users 0" "autovoiceall-max 0"

  -nohostchange -noaway -netsplitop -fishbot -bitchvoice -rating +dnsdb
}



#profile dcc
bind dcc - profile profile:dcc

proc profile:dcc { handle idx text } {
  global profile
  set cmd [lindex [split $text] 0]

#show
  if { [string equal -nocase $cmd show] } {
    set pf [lindex [split $text] 1]

#list profiles
    if { [string equal $pf ""] } {
      putidx $idx "Listing available profiles:"
      foreach name [lsort [array names profile]] {
        putidx $idx "  profile: $name"
      }
      putidx $idx "End of profile list."

#list settings of profile
    } elseif { [info exists profile($pf)] } {
      putidx $idx "listing settings from profile $pf:"
      foreach setting $profile($pf) {
        putidx $idx "  setting: $setting"
      }
      putidx $idx "End of setting list for profile $pf"

#no such profile
    } else {
      putidx $idx "No such profile: $pf"
    }

#load
  } elseif { [string equal -nocase $cmd load] } {
    set chan [lindex [split $text] 1]
    set pf [string tolower [lindex [split $text] 2]]
    set confirm [lindex [split $text] 3]
    set md5 [string range [md5 "$chan $pf"] 0 9]

#no chan
    if { [string equal $chan ""] } {
      putidx $idx "Usage: profile set <channel> <profile>"

#invalid chan or no access
    } elseif { ![validchan $chan] || ![matchattr $handle mn|mn $chan] } {
      putidx $idx "No access or unknown channel: $chan"

#no profile
    } elseif { [string equal $pf ""] } {
      putidx $idx "Usage: profile set <channel> <profile>"

#no such profile
    } elseif { ![info exists profile($pf)] } {
      putidx $idx "No such profile: $pf"

#wrong/no confirm
    } elseif { ![string equal $md5 $confirm] } {
      putidx $idx "WARNING! this will load profile $pf on $chan"
      putidx $idx "This will override current settings!"
      putidx $idx "To confirm this command: profile load $chan $pf $md5"

#load profile
    } else {
      putidx $idx "Loading profile $pf for $chan:"
      foreach setting $profile($pf) {
        set param [join [lrange [split $setting] 1 end]]
        set setting [lindex [split $setting] 0]
#flag
        if { [string match {[+-]} [string range $setting 0 0]] } {
          if { [catch {channel set $chan $setting} error] } {
            putidx $idx "FAILED $setting"
          } else {
            putidx $idx "succes $setting"
          }
#str or int
        } else {
          if { [catch {channel set $chan $setting $param} error] } {
            putidx $idx "FAILED $setting ($param)"
          } else {
            putidx $idx "succes $setting ($param)"
          }
        }
      }
      putidx $idx "Loaded profile $pf for $chan"
    }

#show help
  } else {
    putidx $idx "Usage: profile show \[<profile>\]"
    putidx $idx "Usage: profile load <channel> <profile>"
    putidx $idx "Need to +m or +n flag on a channel to load a profile."
  }
  return 1
}

