chiark / gitweb /
Change telling => tell in many places. Improve some comments.
[ircbot] / bot.tcl
diff --git a/bot.tcl b/bot.tcl
index 98a3e613c9c12dbef9a3c622b011456bae8569e9..315163fd8e02284a849a5d9ed7b0600e8dba6a9d 100755 (executable)
--- a/bot.tcl
+++ b/bot.tcl
@@ -145,7 +145,7 @@ proc looking_whenwhere {when where} {
     return $str
 }
 
-proc telling_event {nl event} {
+proc tell_event {nl event} {
     # For `act' we *haven't* yet done the 750ms delay; we implement
     # that here.  Also, here we turn `talk' into `talk' now and `act'
     # later.  We also support the psuedo-event `none'.  The del msg
@@ -153,28 +153,27 @@ proc telling_event {nl event} {
     switch -exact $event {
        none { }
        talk {
-           telling_event_core $nl talk
-           telling_event $nl act
+           tell_event_core $nl talk
+           tell_event $nl act
        }
        act {
-           after 750 [list telling_event_core $nl $event]
+           after 750 [list tell_event_core $nl $event]
        }
        ident {
-           telling_event_core $nl $event
+           tell_event_core $nl $event
        }
        default {
-           error "telling_event $nl $event"
+           error "tell_event $nl $event"
        }
     }
 }
 
-proc telling_event_core {nl event} {
+proc tell_event_core {nl event} {
     # event is `talk', `act' or `ident'
     # When user talks we actually get talk now and act later
-FIXME - fix calls to check_telling to telling_event
 FIXME - implement all cmds
-FIXME - implement tells_deliver            set stt [list $u passed $now]
-FIXME - implement tells_delete                     catch { unset stt }   ?
+FIXME - implement pass stuff       set stt [list $u passed $now]
+FIXME - implement tells_delete_msgs catch { unset stt }   ?
 FIXME - document the extra param to recordlastseen
     set iml [msgdb_get $nl inbound]
     if {![llength $iml]} return
@@ -184,7 +183,9 @@ FIXME - document the extra param to recordlastseen
 
     if {[info exists telling]} {
        manyset $telling u_last stt telling_when
-       if {"$u_last" != "$u"} { unset telling; unset stt; unset telling_when }
+       if {![info exists u] || "$u_last" != "$u"} {
+           unset telling; unset stt; unset telling_when
+       }
     }
 
     if {![info exists stt]} {
@@ -195,7 +196,7 @@ FIXME - document the extra param to recordlastseen
     set ago [expr {$now - $telling_when}]
 
     # Now we have the components of a telling state
-    #   u     - nick_unique
+    #   u     - nick_unique (unset if not visible)
     #   stt   - state: norecord, mentioned, passede
     #   ago   - how long ago since we did anything
 
@@ -203,7 +204,7 @@ FIXME - document the extra param to recordlastseen
 
     # evstate is string of letters
     #   current state
-    #      n   NORECORD
+    #      n   NORECORD (MESSAGES)
     #      m   MENTIONED
     #      p   PASSED
     #   event
@@ -258,61 +259,43 @@ FIXME - document the extra param to recordlastseen
        pt???rv {
            # consider delivered:
            #  (very recently passed, and the user talks)
-           telling_delete_msgs {} $nl
+           tell_delete_msgs {} $nl
            return
        }
-       ?t????? {
+       nt????? - mt????? -
+       pt???uu - pt???rs - pt???rl - pt???p? {
            # ignore (any other `talk's) - act handles these
            return
        }
-       ni???uu - naii?uu - nas?iuu - mi???uu {
-           # pass, but unreliable
-           telling_pass $nl
-           telling_delete_msgs {} $nl
+       ni????? - naii??? - nas?i?? - mi????? - pa????l {
+           # pass and then stuff
+           
+
            return
        }
-       ni????? - naii??? - nas?i?? - mi????? {
-           # pass, reliable
-           telling_pass $nl
-           set stt passed
-       }
-       UP TO HERE
-       FIXME print out state diagram and tick off traces
-       
-       
-       
-           set telling [list $u passed
-       
-       ?iin???? - ?iip?l?? - ?ii????? -
-       ?s?n??iv - ?s?m??iv - ?s?p?liv {
-           # pass messages
-           #  (insecure and not passed recently, or just arriving;
-           #   secure and not passed recently)
-           tells_deliver $nl
-       }
-       ?ssp???? - ???p?s?? - ???p?v?? {
-           # ignore
-           #  (recently mentioned or passed
-           #   immediate `talk' thing)
-       }
-       ?s?n???? - ?slm???? - cs?????? {
-           # mention messages
-           #  (secure and not mentioned recently or just arriving,
-           #           and should not pass)
-           sendprivmsg $nl \
-                   {You have messages (so identify yourself please).}]
-           set stt [list $u mentioned $now]
+       nas?u?? {
+           sendprivmsg $nl {You have messages (so identify yourself please).}]
+           set stt mentioned
+       }
+       masl??? {
+           sendprivmsg $nl {Don't forget about your messages.}]
+       }
+       pi????? {
+           return
+       }
+       mass??? - pa????v - pa????s {
+           # too soon
+           return
        }
        * {
-           error "check_telling_core nl=$nl evstate=$evstate ?"
+           error "tell_event_core nl=$nl evstate=$evstate ?"
        }
     }
-
-    #   current visibility
-    #      v   Visible
-    #      h   Hidden (invisible, no unique)
-     go back to norecord if invisible
-
+    if {![info exists u]} {
+       catch { unset telling }
+    } else {
+       set telling [list $u $stt $now]
+    }
 }
 
 proc recordlastseen_n {n how here} {
@@ -323,7 +306,7 @@ proc recordlastseen_n {n how here} {
 
     if {!$here} return
 
-    check_telling $nl [lindex {none act talk} $here]
+    tell_event $nl [lindex {none act talk} $here]
 
     upvar #0 lookedfor($nl) lf
     if {[info exists lf]} {
@@ -766,6 +749,11 @@ set default_settings_nick {
     tellsec insecure
     tellrel {remind 3600 30}
 }
+# also:
+#  inbound: concatenation of many   sender time_t text
+#  outbound: concatenation of many   recipient time_t count
+#   neither are sorted particularly; only one entry per recipient in
+#   output; both sender and recipient are cased
 
 set default_settings_chan {
     autojoin 1
@@ -1593,7 +1581,7 @@ def_ucmd identpass {
     upvar #0 nick_username($luser) rec_username
     set rec_username $username
     ucmdr "Pleased to see you, $username." {}
-    telling_event $luser ident
+    tell_event $luser ident
 }
 
 def_ucmd summon {