chiark / gitweb /
Improve helpinfos for tell. Working on check_telling. Also need to make it be calle...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 30 Nov 2001 17:34:29 +0000 (17:34 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 30 Nov 2001 17:34:29 +0000 (17:34 +0000)
bot.tcl
helpinfos

diff --git a/bot.tcl b/bot.tcl
index 4ea4fd8cdd1702be8c2f0f992b17d671683a5181..81583ee407d790e6d947e8b10895c09a4af3ea56 100755 (executable)
--- a/bot.tcl
+++ b/bot.tcl
@@ -18,7 +18,7 @@ proc privmsg_unlogged {prefix ischan params} {
     set chan [lindex $params 0]
     upvar #0 chan_lastactivity([irctolower $chan]) la
     set la [clock seconds]
-    catch_logged { recordlastseen_p $prefix "talking on $chan" 1 }
+    catch_logged { recordlastseen_p $prefix "talking on $chan" 2 }
     return 1
 }
 
@@ -145,11 +145,112 @@ proc looking_whenwhere {when where} {
     return $str
 }
 
+proc check_telling {nl event} {
+    # event is `talk', `act' or `come'
+
+    set iml [msgdb_get $nl inbound]
+    if {![llength $iml]} return
+
+    upvar #0 nick_telling($nl) telling
+    upvar #0 nick_unique($nl) u
+
+    if {[info exists telling]} {
+       manyset $telling u2 stt telling_when
+       if {"$u2" != "$u"} { unset telling; unset stt; unset telling_when }
+    }
+
+    if {![info exists stt]} {
+       set stt norecord
+       set telling_when $now
+    }
+
+    set ago [expr {$now - $telling_when}]
+
+    # evstate is string of letters
+    #   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)
+    #   reliability and timing
+    #      uu  Unreliable
+    #      rv  Remind, very soon (before within-interval)
+    #      rs  Remind, soon (between)
+    #      rl  Remind, late (aftr every-interval)
+    #      ps  Pester, soon (before interval)
+    #      pl  Pester, late (after interval)
+    #   current identification
+    #      i   Identified
+    #      u   Unidentified
+    #   current visibility
+    #      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#" }
+    }
+
+    manyset [nickdb_set $n tellrel] rel relint relwithin
+    switch -exact $rel {
+       unreliable { append evstate uu }
+       remind { append evstate [expr {
+           $ago<$relwithin ? "rv" : $ago<$relint ? "rs" : "rl"
+       }]}
+       pester { append evstate [expr {$ago<$relint ? "ps" : "pl"}] }
+       default { append evstate "#$rel#" }
+    }
+
+    upvar #0 nick_username($nl) nu
+    if {[info exists nu] && "$nu" == "[nickdb_get $nl username]"} {
+       append evstate i
+    } else {
+       append evstate u
+    }
+
+    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]} {
+       
+       
+    }
+       
+       if {![info exists telling]} {
+           
+
 proc recordlastseen_n {n how here} {
     global lastseen lookedfor
-    set lastseen([irctolower $n]) [list $n [clock seconds] $how]
+    set nl [irctolower $n]
+    set now [clock seconds]
+    set lastseen($nl) [list $n $now $how]
+
     if {!$here} return
-    upvar #0 lookedfor([irctolower $n]) lf
+
+    check_telling $nl [lindex {x act talk} $here]
+
+    upvar #0 lookedfor($nl) lf
     if {[info exists lf]} {
        switch -exact [llength $lf] {
            0 {
@@ -363,9 +464,10 @@ set nick_counter 0
 set nick_arys {onchans username unique}
 # nick_onchans($luser) -> [list ... $lchan ...]
 # nick_username($luser) -> <securely known local username>
-# nick_unique($luser) -> <counter>
+# nick_unique($luser) -> <includes-counter>
 # nick_case($luser) -> $user  (valid even if no longer visible)
 # nick_markid($luser) -> <after id for marktime>
+# nick_telling($luser) -> <unique> mentioned|passed <when>
 
 # chan_nicks($lchan) -> [list ... $luser ...]
 # chan_lastactivity($lchan) -> [clock seconds]
@@ -429,6 +531,7 @@ proc nick_ishere {n} {
 
 proc msg_JOIN {p c chan} {
     prefix_nick
+    nick_ishere $n
     recordlastseen_n $n "joining $chan" 1
     set nl [irctolower $n]
     set lchan [irctolower $chan]
@@ -440,7 +543,6 @@ proc msg_JOIN {p c chan} {
     }
     lappend oc $lchan
     lappend nlist $nl
-    nick_ishere $n
 }
 proc msg_PART {p c chan args} {
     prefix_nick
index 5bbbb03fc3c2a55f19818fecd36ef45a7ae432bc..7d05c432af68ef5d280fa0f9a26704357f418fcc 100644 (file)
--- a/helpinfos
+++ b/helpinfos
@@ -47,10 +47,10 @@ tell <nick> <message ...>
  set tellme mailto <email-addr>   By email.  (Secure nicks only.)
 and also when to consider them delivered (see `help !untell'):
  set tellme unreliable            Tell you once, then forget.
- set tellme pester <interval>     Remind until you say !delmsg
  set tellme remind <every-interval> [<within-interval>]
     Remind until you talk on channel within <within-interval>
     of me having told you.  (Default is remind 1h 30s.)
+ set tellme pester <interval>     Remind until you say !delmsg
 
 :delmsg
 delmsg [<nick> ...]