From 34c25cd7eed4ffe97ef84516e7f6586946ee4662 Mon Sep 17 00:00:00 2001 Message-Id: <34c25cd7eed4ffe97ef84516e7f6586946ee4662.1715733817.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 29 Nov 2001 18:59:04 +0000 Subject: [PATCH] marktime settings moved from irccore.tcl to bot.tcl; inform message senders about undelivered tells; inform message senders about recipient tellme mode Organization: Straylight/Edgeware From: Ian Jackson --- bot.tcl | 79 +++++++++++++++++++++++++++++++++++++++++++---------- irccore.tcl | 3 -- 2 files changed, 65 insertions(+), 17 deletions(-) diff --git a/bot.tcl b/bot.tcl index fb537d7..0929a0f 100755 --- 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] } diff --git a/irccore.tcl b/irccore.tcl index 1721cec..4937211 100644 --- a/irccore.tcl +++ b/irccore.tcl @@ -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 -- [mdw]