#by wiebe @ QuakeNet



#help glev msg
bind msgm mn "help glev" c_glev:help:msg

proc c_glev:help:msg { nick uhost handle text } {
    lappend output "Usage: glev <nick>|<#account> \[<flags>\]"
  lappend output "To view the glev list, to view the global flags for nick/#account/pattern on the channel, or to change global flags for the user."
  lappend output "Where \002a\002=auto-op \002b\002=bot \002d\002=deny-op \002f\002=friend \002g\002=auto-voice \002k\002=auto-kickban \002l\002=halfop \002m\002=master \002n\002=owner \002o\002=op \002p\002=party-line \002q\002=deny-voice \002r\002=deny-halfop \002t\002=botnet-master \002\u\002=unshared \002v\002=voice \002y\002=auto-halfop"
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putcmdlog "($nick!$uhost) !$handle! $text"
}



#glev msg
bind msg mn glev c_glev:msg

proc c_glev:msg { nick uhost handle text } {

  set target [lindex [split $text] 0]
  set flags [lindex [split $text] 1]
  set accountgiven 0
  if { [string match \#* $target] } {
    set account [string range $target 1 end]
    set accountgiven 1
  } else {
    set account [nick2hand $target]
    if { [string equal $account *] } { set account "" }
  }
  if { !$accountgiven } { set accountshow "$target ($account)" } else { set accountshow $account }

#always require a target param
  if { [string equal $target ""] } {
    lappend output "Usage: glev <nick>|<#account> \[<flags>\]"

#valid target given, no flags
  } elseif { [validuser $account] && [string equal $flags ""] } {
    set flags [chattr $account]
    if { ![string equal $flags -] } {
      set result 1
      set space1 [string repeat " " [expr 20 - [string length $account]]]
      set laston [getuser $account LASTON]
      set laston2 [lindex [split $laston] 1]
      set laston [lindex [split $laston] 0]
      set lastondate ""
      if { ![string equal $laston ""] } { set lastondate [clock format $laston -format %d/%m/%y] }
      set date [clock format [unixtime] -format %d/%m/%y]
      if { [string equal $lastondate $date] } {
        set laston "[clock format $laston -format %H:%M] $laston2"
      } elseif { ![string equal $laston ""] } {
        set laston "[clock format $laston -format %d/%m/%y] $laston2"
      } else {
        set laston never
      }
      set space2 [string repeat " " [expr 15 - [string length $flags]]]
      lappend output "$accountshow$space1$flags$space2$laston"
    }

#show glev list
  } elseif { ![string equal $target ""] && [string equal $flags ""] } {
    lappend output "Listing glev matching $target"
    set result 0
    set match $target
    regsub -all {\[} $match {\\[} match
    regsub -all {\]} $match {\\]} match
    regsub -all {\\} $match {\\\\} match
    foreach user [lsort [userlist]] {
      if { [string match $match $user] } {
        set flags [chattr $user]
        if { ![string equal $flags -] } {
          set result 1
          set space1 [string repeat " " [expr 20 - [string length $user]]]
          set laston [getuser $user LASTON]
          set laston2 [lindex [split $laston] 1]
          set laston [lindex [split $laston] 0]
          set lastondate ""
          if { ![string equal $laston ""] } { set lastondate [clock format $laston -format %d/%m/%y] }
          set date [clock format [unixtime] -format %d/%m/%y]
          if { [string equal $lastondate $date] } {
            set laston "[clock format $laston -format %H:%M] $laston2"
          } elseif { ![string equal $laston ""] } {
            set laston "[clock format $laston -format %d/%m/%y] $laston2"
          } else {
            set laston never
          }
          set space2 [string repeat " " [expr 15 - [string length $flags]]]
          lappend output "$user$space1$flags$space2$laston"
        }
      }
    }
    if { !$result } {
      lappend output "No users on the glev list matching $target"
    } else {
      lappend output "End of glev list matching $target"
    }

#error nick is unknown, or unknown account
  } elseif { ![validuser $account] && ![string equal $target ""] } {
    if { $accountgiven } {
      lappend output "Account $account is not known."
    } else {
      lappend output "User $target is not known."
    }

#nick +m tries to change flags for a +mn target
  } elseif { ![matchattr $handle n] && [matchattr $account mn] } {
    lappend output "You can not change flags on other global masters or owners."

#tries to change mn flags, but isnt owner
  } elseif { ([string match *m* $flags] || [string match *n* $flags]) && ![matchattr $handle n] } {
    lappend output "You must be a global owner to change global master or owner flags."

#tries to set +n with other flags, target not +n
  } elseif { [regexp {\+[^-]*n} $flags] && ![string equal $flags +n] && ![matchattr $account n] } {

    lappend output "You are about to make $accountshow an owner of this bot, if you are sure you want this use:"
    lappend output "/msg $::botnick glev $target +n"

#other flags, invalid
  } elseif { [regexp {^[^-+]|[^-+adfgklmnopqrtuvyA-Z]} $flags] } {
    lappend output "Invalid flags specified, see '/msg $::botnick help glev' for a list of valid flags."

#do it
  } else {
    set flags [chattr $account $flags]
    if { [string equal $flags -] } {
      lappend output "Account $accountshow now has no global flags."
    } else {
      lappend output "Global flags for account $accountshow are now $flags"
    }
  }

  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  return 1
}

