chiark / gitweb /
Document what TALK and ACT mean etc.
[ircbot] / bot.tcl
diff --git a/bot.tcl b/bot.tcl
index 81583ee407d790e6d947e8b10895c09a4af3ea56..01113635984261ec7cf107ea807355c0de497859 100755 (executable)
--- a/bot.tcl
+++ b/bot.tcl
@@ -146,8 +146,30 @@ proc looking_whenwhere {when where} {
 }
 
 proc check_telling {nl event} {
-    # event is `talk', `act' or `come'
+    # for all except `talk' we delay 750ms
+    switch -exact $event {
+       none {
+       }
+       talk {
+           check_telling_core $nl talk
+           check_telling_core $nl act
+       }
+       act {
+           after 750 [list check_telling_core $nl $event]
+       }
+       default {
+           error "check_telling $nl $event"
+       }
+    }
+}
 
+proc check_telling_core {nl event} {
+    # event is `talk' or `act'
+    # When user talks we actually get talk now and act later
+FIXME - make it be called with come
+FIXME - implement all cmds
+FIXME - implement tells_deliver            set stt [list $u passed $now]
+FIXME - implement tells_delete                     catch { unset stt }   ?
     set iml [msgdb_get $nl inbound]
     if {![llength $iml]} return
 
@@ -171,14 +193,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 +215,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,23 +244,40 @@ proc check_telling {nl event} {
     append evstate [expr {[info exists u] ? "v" : "h"}]
 
     switch -glob $evstate {
-       
-    
-           
-           
-    if {[
-    set security
-
-    switch -exact
-    
-    if {![info exists u]} { catch { unset telling } }
-       && [info exists telling]} {
-       
-       
+       t??prv?v {
+           # consider delivered:
+           #  (very recently passed, and the user talks)
+           tells_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).}]
+           set stt [list $u mentioned $now]
+       }
+       * {
+           error "check_telling_core nl=$nl evstate=$evstate ?"
+       }
     }
-       
-       if {![info exists telling]} {
-           
+}
 
 proc recordlastseen_n {n how here} {
     global lastseen lookedfor
@@ -248,7 +287,7 @@ proc recordlastseen_n {n how here} {
 
     if {!$here} return
 
-    check_telling $nl [lindex {x act talk} $here]
+    check_telling $nl [lindex {none act talk} $here]
 
     upvar #0 lookedfor($nl) lf
     if {[info exists lf]} {