From 37a9f1adbed3ab89c14bf4c8c4dbac5cd0ca29ed Mon Sep 17 00:00:00 2001 Message-Id: <37a9f1adbed3ab89c14bf4c8c4dbac5cd0ca29ed.1715746402.git.mdw@distorted.org.uk> From: Mark Wooding Date: Fri, 30 Nov 2001 17:34:29 +0000 Subject: [PATCH] Improve helpinfos for tell. Working on check_telling. Also need to make it be called with "come". Organization: Straylight/Edgeware From: Ian Jackson --- bot.tcl | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++--- helpinfos | 2 +- 2 files changed, 108 insertions(+), 6 deletions(-) diff --git a/bot.tcl b/bot.tcl index 4ea4fd8..81583ee 100755 --- 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) -> -# nick_unique($luser) -> +# nick_unique($luser) -> # nick_case($luser) -> $user (valid even if no longer visible) # nick_markid($luser) -> +# nick_telling($luser) -> mentioned|passed # 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 diff --git a/helpinfos b/helpinfos index 5bbbb03..7d05c43 100644 --- a/helpinfos +++ b/helpinfos @@ -47,10 +47,10 @@ tell set tellme mailto 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 Remind until you say !delmsg set tellme remind [] Remind until you talk on channel within of me having told you. (Default is remind 1h 30s.) + set tellme pester Remind until you say !delmsg :delmsg delmsg [ ...] -- [mdw]