+ ucmdr {} $m
+}
+
+proc debug_reset {} {
+ global debugusers debug_cancelling
+ unset debug_cancelling
+ set debugusers {}
+ reporterr "debug mode timed out"
+}
+
+def_ucmd debug {
+ prefix_nick
+ global debugusers debug_cancelling debug_reset_after
+ if {![string length $text]} { error "must give list of usernames" }
+ llength $text
+ set debugusers $text
+ catch { after cancel $debug_cancelling }
+ set debug_cancelling [after $debug_reset_after debug_reset]
+ reporterr "debug enabled by $n: $debugusers"
+}
+
+def_ucmd nodebug {
+ prefix_nick
+ global debugusers debug_cancelling
+ set debugusers {}
+ catch { after cancel $debug_cancelling }
+ catch { unset debug_cancelling }
+ reporterr "debug disabled by $n"
+}
+
+def_ucmd who {
+ set r {}
+ foreach m [list_objs monitor] {
+ upvar #0 monitor/$m mm
+ lappend r "monitoring $mm(chans) for $m"
+ }
+ foreach d [list_objs deviceset] {
+ upvar #0 deviceset/$d dd
+ regexp {^[^:]*\:[^:]*} $dd(group) dest
+ lappend r "sending $dd(monname) to $dest"
+ }
+ ucmdr [join $r "\n"] {}