#by wiebe @ QuakeNet



#help listuser msg
bind msgm mn "help listuser" c_listuser:help:msg

proc c_listuser:help:msg { nick uhost handle text } {
  lappend output "Usage: listuser <pattern> \[<flags> \[<channel>\]\]"
  lappend output "Lists accounts on the bot matching pattern, flags and channel. Flags are matched with <global-flags>|&<channel-flags>, where | means OR and & means AND."
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putcmdlog "($nick!$uhost) !$handle! $text"
}



#listuser msg
bind msg mn listuser c_listuser:msg

proc c_listuser:msg { nick uhost handle text } {

  set target [lindex [split $text] 0]
  set flags [lindex [split $text] 1]
  set chan [lindex [split $text] 2]

#always require a target param
  if { [string equal $target ""] } {
    lappend output "Usage: Listuser <pattern> \[<flags> \[<channel>\]\]"

  } elseif { ![string equal $chan ""] && ![validchan $chan] } {
    lappend output "Invalid channel $chan"
  
#show listuser list
  } else {
    set result ""
    set match $target
    set toolong 0
    regsub -all {\[} $match {\\[} match
    regsub -all {\]} $match {\\]} match
    regsub -all {\\} $match {\\\\} match

    if { [string equal $flags ""] } {
      set users [userlist]
    } elseif { [string equal $chan ""] } {
      set users [userlist $flags]
    } else {
      set users [userlist $flags $chan]
    }
    set users [lsort $users]

    foreach user $users {
      if { [string match $match $user] } {
        if { [string length [join $result]] > "350" } {
          lappend output [join $result]
          set result ""
        }
        lappend result $user
      }
    }
    if { [string equal $result ""] } {
      lappend output "No users found matching $target $flags $chan"
    } else {
      lappend output [join $result]
      lappend output "End of user list matching $target $flags $chan"
    }
  }

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

