chiark / gitweb /
Further work on tell
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 4 Dec 2001 18:50:01 +0000 (18:50 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 4 Dec 2001 18:50:01 +0000 (18:50 +0000)
bot.tcl

diff --git a/bot.tcl b/bot.tcl
index 81583ee407d790e6d947e8b10895c09a4af3ea56..3a227139ab1011bd4fb2a662a28eaa739abe9470 100755 (executable)
--- a/bot.tcl
+++ b/bot.tcl
@@ -145,9 +145,12 @@ proc looking_whenwhere {when where} {
     return $str
 }
 
-proc check_telling {nl event} {
+proc check_telling_core {nl event} {
     # event is `talk', `act' or `come'
-
+FIXME - delay 750ms when you invoke this, except for `talk'
+        which causes `talk' now and `act' later
+FIXME - make it be called with come
+FIXME - 
     set iml [msgdb_get $nl inbound]
     if {![llength $iml]} return
 
@@ -171,14 +174,14 @@ proc check_telling {nl event} {
     #      t   talk
     #      a   act
     #      c   come
-    #   current state
-    #      n   NORECORD
-    #      m   MENTIONED
-    #      p   PASSED
     #   security level and timing
     #      ii  Insecure
     #      ss  Secure and soon (before interval)
     #      sl  Secure and late (after interval)
+    #   current state
+    #      n   NORECORD
+    #      m   MENTIONED
+    #      p   PASSED
     #   reliability and timing
     #      uu  Unreliable
     #      rv  Remind, very soon (before within-interval)
@@ -193,15 +196,15 @@ proc check_telling {nl event} {
     #      v   Visible
     #      h   Hidden (invisible, no unique)
 
-    set evstate [string range $stt 0 0]
-    
     manyset [nickdb_get $n tellsec] sec secwhen
     switch -exact $sec {
-       insecure { append evstate ii }
-       secure { append evstate [expr {$ago<$secwhen ? "sl" : "ss"}] }
-       default { append evstate "#$sec#" }
+       insecure { set evstate ii }
+       secure { set evstate [expr {$ago<$secwhen ? "sl" : "ss"}] }
+       default { set evstate "#$sec#" }
     }
 
+    append evstate [string range $stt 0 0]
+    
     manyset [nickdb_set $n tellrel] rel relint relwithin
     switch -exact $rel {
        unreliable { append evstate uu }
@@ -222,7 +225,48 @@ proc check_telling {nl event} {
     append evstate [expr {[info exists u] ? "v" : "h"}]
 
     switch -glob $evstate {
+       t??prv?v {
+           # consider delivered:
+           #  (very recently passed, and the user talks)
+           tell_delete {} $nl
+       }
+       t??????? {
+           # ignore
+           #   (any other `talk's)
+       }
+       ?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).}]
+       }
+       * {
+           error "check_telling_core nl=$nl evstate=$evstate ?"
+       }
+    }
+}
+
+
+    
+       }
+       
        
+       {
+       }
+       ns???u