# solar - Sep 15 2004

namespace eval herds {

	bind dcc - herd [namespace current]::dcc:pkg
	#bind pub - !herd [namespace current]::pub:pkg
	#bind msg - !herd [namespace current]::msg:pkg

	proc pkg:lookup { who nick arg } {
		set varg "[string trim $arg]"
		set VERBOSE "0"
		if {[lindex [string trim $arg] 0] == "-r"} {
			set VERBOSE "1"
			set arg "[lrange $arg 1 end]"
			if { $arg == ""} {
				set arg [lindex [split "${who}" "-"] 1]
			}
		}
		set arg "[lindex [string trim $arg] 0]"
		if {$arg == "Error"} {
			return;
		}
		set stripmagic "/>=-1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		if {$arg == "-a"} {
			if {[catch {exec /var/irc/jeeves/herds.py -a} line] == 0} {
				set arg "[lrange [string trim $varg] 1 end]"
				if {[string trim "[string toupper $arg]" "${stripmagic}" ] != ""} {
					return 0
				}
				set result ""
				foreach item $line {
					if {[string match "*${arg}*" $item] != 0} {
						set result "$item ${result}"
					}
				}
				if {$result != ""} {
					set res [string range "PRIVMSG $who :${nick}: [lsort $result]" 0 450]
					set len [string length "$res"]
					if {$len == 451} {
						set res "${res}..."
					}
					#putlog "$len -> ${res}"
					putserv "${res}"
				}
			}
			return 0
		}
		if {[string trim "[string toupper $arg]" "${stripmagic}" ] != ""} {
			set foo [string trim "[string toupper $arg]" "${stripmagic}" ]
			putlog "PKG IS NOT SAFE $arg requested by $who. remaining foo=$foo"
			return 0
		}
		if {[catch {exec env VERBOSE=${VERBOSE} /var/irc/jeeves/herds.py $arg} line] == 0} {
			putserv "PRIVMSG $who :${nick}: ($arg) $line"
		} else {
			#if {$who != $nick} {
			#	if {[onchan ServoFlame $who]} {
			#		putserv "PRIVMSG $who :ServoFlame: herd $arg"
			#	} else {
			#		putserv "PRIVMSG $who :shrug.."
			#	}
			#}
			if {[file exists ~/.not-a-herd.txt]} {
				set fp [open ~/.not-a-herd.txt r]
				while {[gets $fp line] >= 0} {
					if {[lindex $line 0] == "$arg"} {
						putserv "PRIVMSG $who :${nick}: ($arg) [lrange $line 1 end]"
						close $fp
						return 0
					}
				}
				close $fp
			}
			putserv "PRIVMSG $who :${nick}: unable to find ${arg} ; Perhaps one of us is malfunctioning?"
		}
		return 0
	}

	proc dcc:pkg {hand idx arg} {
		set nick [hand2nick $hand "#gentoo-infra"]
		[namespace current]::pkg:lookup "$nick" "$nick" "$arg"
	}
	proc msg:pkg {nick uhost hand arg} {
		[namespace current]::pkg:lookup "$nick" "$nick" "$arg"
	}

	proc pub:pkg {nick uhost hand chan arg} {
		[namespace current]::pkg:lookup "$chan" "$nick" "$arg"
	}
	proc update:timer { } {
		putlog "Updating the herd.xml"
		catch  { exec /var/irc/jeeves/herds.sh & }
	}
	#timer 60 [namespace current]::update:timer
}
