chiark / gitweb /
marktime settings moved from irccore.tcl to bot.tcl; inform message senders about...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 29 Nov 2001 18:59:04 +0000 (18:59 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 29 Nov 2001 18:59:04 +0000 (18:59 +0000)
bot.tcl
irccore.tcl

diff --git a/bot.tcl b/bot.tcl
index fb537d7481c25314236629bc2308a4207d0a428d..0929a0f3bd98c9ffaeeeb20ddaabbc727bc8d0b5 100755 (executable)
--- a/bot.tcl
+++ b/bot.tcl
@@ -6,6 +6,9 @@ source irccore.tcl
 source parsecmd.tcl
 source stdhelp.tcl
 
+defset marktime_min 300
+defset marktime_join_startdelay 5000
+
 proc privmsg_unlogged {prefix ischan params} {
     if {!$ischan ||
         [regexp {^![a-z][-a-z]*[a-z]( .*)?$} [lindex $params 1]]} {
@@ -413,7 +416,7 @@ proc msg_NICK {p c newnick} {
        set nlist [grep tn {"$tn" != "$luser"} $nlist]
        lappend nlist $lusernew
     }
-    lnick_marktime_start $lusernew "Hi." 500
+    lnick_marktime_start $lusernew "Hi." 500 1
     nick_case $newnick
 }
 
@@ -433,7 +436,7 @@ proc msg_JOIN {p c chan} {
     upvar #0 chan_nicks($lchan) nlist
     if {![info exists oc]} {
        global marktime_join_startdelay
-       lnick_marktime_start $nl "Welcome." $marktime_join_startdelay
+       lnick_marktime_start $nl "Welcome." $marktime_join_startdelay 1
     }
     lappend oc $lchan
     lappend nlist $nl
@@ -1008,6 +1011,7 @@ def_ucmd tell {
     if {[info exists nick_case($ltarget)]} { set ctarget $nick_case($ltarget) }
 
     manyset [nickdb_get $target tellsec] sec mailto mailwhy
+    manyset [nickdb_get $target tellrel] rel relint relwithin
     switch -exact $sec {
        insecure - secure {
            set now [clock seconds]
@@ -1030,11 +1034,24 @@ def_ucmd tell {
                lappend noutbound $ctarget $now 1
            }
            msgsdb_set $n outbound $noutbound
-           if {!$found} {
-               ucmdr "OK, I'll tell $ctarget." {}
+           set msg "OK, I'll tell $ctarget"
+           if {$found} { append msg " that too" }
+           append msg ", "
+           if {"$sec" != "secure"} {
+               switch -exact $rel {
+                   unreliable { append msg "neither reliably nor securely" }
+                   remind { append msg "pretty reliably, but not securely" }
+                   pester { append msg "reliably but not securely" }
+               }
            } else {
-               ucmdr "OK, I'll tell $ctarget that too." {}
+               switch -exact $rel {
+                   unreliable { append msg "securely but not reliably" }
+                   remind { append msg "securely and pretty reliably" }
+                   pester { append msg "reliably and securely" }
+               }
            }
+           append msg .
+           ucmdr $msg {}
        }
        mailto {
            set fmtmsg [exec fmt << " $text"]
@@ -1242,7 +1259,7 @@ def_setting marktime {
        set mt [parse_interval $mt $marktime_min]
     }
     nickdb_set $n marktime $mt
-    lnick_marktime_start [irctolower $n] "So:" 500
+    lnick_marktime_start [irctolower $n] "So:" 500 0
     ucmdr {} [marktime_desc $mt]
 }
 
@@ -1321,6 +1338,37 @@ def_setting tellme {
     ucmdr [tellme_${sr}_desc $v] {}
 }
 
+proc lnick_checktold {luser} {
+    set ml [msgsdb_get $luser outbound]
+    if {![llength $ml]} return
+    set is1 [expr {[llength $ml]==3}]
+    set m1 "FYI, I haven't yet passed on your"
+    set ol {}
+    set now [clock seconds]
+    while {[llength $ml]} {
+       manyset $ml r t n
+       set ml [lreplace $ml 0 2]
+       set td [expr {$now-$t}]
+       if {$n == 1} {
+           set iv [showinterval $td]
+           set ifo "$r, $iv"
+           set if1 "message to $r, $iv."
+       } else {
+           set iv [showintervalsecs $td 0]
+           set ifo "$r, $n messages, oldest $iv"
+           set if1 "$n messages to $r, oldest $iv."
+       }
+       if {$is1} {
+           sendprivmsg $luser "$m1 $if1"
+           return
+       } else {
+           lappend ol " to $ifo[expr {[llength $ml] ? ";" : "."}]"
+       }
+    }
+    sendprivmsg $luser "$m1 messages:"
+    msendprivmsg $luser $ol
+}
+
 def_ucmd set {
     global settings
     prefix_nick
@@ -1450,32 +1498,34 @@ proc lnick_marktime_cancel {luser} {
     catch { unset mi }
 }
 
-proc lnick_marktime_doafter {luser why ms} {
+proc lnick_marktime_doafter {luser why ms mentiontold} {
     lnick_marktime_cancel $luser
     upvar #0 nick_markid($luser) mi
-    set mi [after $ms [list lnick_marktime_now $luser $why]]
+    set mi [after $ms [list lnick_marktime_now $luser $why 0]]
 }
 
 proc lnick_marktime_reset {luser} {
     set mt [nickdb_get $luser marktime]
     if {"$mt" == "off" || "$mt" == "once"} return
-    lnick_marktime_doafter $luser "Time passes." [expr {$mt*1000}]
+    lnick_marktime_doafter $luser "Time passes." [expr {$mt*1000}] 0
 }
 
-proc lnick_marktime_start {luser why ms} {
+proc lnick_marktime_start {luser why ms mentiontold} {
     set mt [nickdb_get $luser marktime]
     if {"$mt" == "off"} {
        lnick_marktime_cancel $luser
+       after $ms [list lnick_checktold $luser]
     } else {
-       lnick_marktime_doafter $luser $why $ms
+       lnick_marktime_doafter $luser $why $ms $mentiontold
     }
 }
 
-proc lnick_marktime_now {luser why} {
+proc lnick_marktime_now {luser why mentiontold} {
     upvar #0 nick_onchans($luser) oc
     global calling_nick
     set calling_nick $luser
     sendprivmsg $luser [lnick_pingstring $why $oc ""]
+    if {$mentiontold} { lnick_checktold $luser }
     lnick_marktime_reset $luser
 }    
 
@@ -1512,12 +1562,12 @@ proc lnick_pingstring {why oc apstring} {
 }
 
 def_ucmd ping {
+    prefix_nick
+    set ln [irctolower $n]
     if {[ischan $dest]} {
        set oc [irctolower $dest]
     } else {
        global nick_onchans
-       prefix_nick
-       set ln [irctolower $n]
        if {[info exists nick_onchans($ln)]} {
            set oc $nick_onchans($ln)
        } else {
@@ -1525,6 +1575,7 @@ def_ucmd ping {
        }
        if {[llength $oc]} { lnick_marktime_reset $ln }
     }
+    lnick_checktold $ln
     ucmdr {} [lnick_pingstring "Pong!" $oc $text]
 }
 
index 1721cec74b7816bffc673fa6a332a520c9a3ddc0..4937211acb00aa638728d3c19ee82814aad1984e 100644 (file)
@@ -18,9 +18,6 @@ defset out_lag_lag 5000
 defset out_lag_very 25000
 defset ownping_every 300000
 
-defset marktime_min 300
-defset marktime_join_startdelay 5000
-
 proc manyset {list args} {
     foreach val $list var $args {
        upvar 1 $var my