+ recordlastseen_n $n "talking to me"
+ set output $n
+ }
+
+ if {[catch {
+ regsub {^! *} $text {} text
+ set ucmd [ta_word]
+ set procname ucmd_[string tolower $ucmd]
+ if {[catch { info body $procname }]} {
+ error "unknown command; try help for help"
+ }
+ $procname
+ } rv]} {
+ sendout PRIVMSG $n "error: $rv"
+ } else {
+ foreach {td val} [list $n [lindex $rv 0] $output [lindex $rv 1]] {
+ foreach l [split $val "\n"] {
+ sendout PRIVMSG $td $l
+ }
+ }
+ }
+}
+
+proc ta_nomore {} {
+ upvar 1 text text
+ if {[string length $text]} { error "too many parameters" }
+}
+
+proc ta_word {} {
+ upvar 1 text text
+ if {![regexp {^([^ ]+) *(.*)} $text dummy firstword text]} {
+ error "too few parameters"
+ }
+ return $firstword
+}
+
+proc ta_nick {} {
+ upvar 1 text text
+ set v [ta_word]
+ check_nick $v
+ return $v
+}
+
+proc ucmdr {priv pub} {
+ return -code return [list $priv $pub]
+}
+
+proc ucmd_help {} {
+ upvar 1 text text
+ ta_nomore
+ ucmdr \
+{Commands currently understood:
+help
+seen <nick>} {}
+}
+
+proc manyset {list args} {
+ foreach val $list var $args {
+ upvar 1 $var my
+ set my $val
+ }
+}
+
+proc ucmd_seen {} {
+ global lastseen nick
+ upvar 1 text text
+ set n [irctolower [ta_nick]]
+ ta_nomore
+ if {"$n" == "[irctolower $nick]"} {
+ error "I am not self-aware."
+ } elseif {![info exists lastseen($n)]} {
+ ucmdr {} "I've never seen $n."
+ } else {
+ manyset $lastseen($n) realnick time what
+ set howlong [expr {[clock seconds] - $time}]
+ if {$howlong <= 0} {
+ set string now
+ } elseif {$howlong < 1000} {
+ set string "${howlong}s ago"
+ } else {
+ if {$howlong < 1000000} {
+ set pfx k
+ set scale 1000
+ } else {
+ set pfx M
+ set scale 1000000
+ }
+ set value [expr "$howlong.0 / $scale"]
+ foreach {min format} {100 %.0f 10 %.1f 1 %.2f} {
+ if {$value < $min} continue
+ set string [format "$format${pfx}s ago" $value]
+ break
+ }
+ }
+ if {![info exists string]} { set string now }
+ ucmdr {} "I last saw $realnick $string, $what."