From: Ian Jackson Date: Tue, 12 Feb 2002 15:56:06 +0000 (+0000) Subject: finished tell_delete_msgs. Maybe all right. Check fixmes and test. X-Git-Tag: merge-2001-10-09-tell~16 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/ircbot/commitdiff_plain/b36ab2da7886b10b668a08b56e201ba4fa54c4f0 finished tell_delete_msgs. Maybe all right. Check fixmes and test. --- diff --git a/bot.tcl b/bot.tcl index 0fd2b75..dc8ed93 100755 --- a/bot.tcl +++ b/bot.tcl @@ -1189,14 +1189,57 @@ proc tell_effective_sec {n} { return $l } -proc tell_peernicks { --- FIXME HERE +proc tell_peernicks {text} { + set text [irctolower [string trim $text]] + set senders [split $text " "] + foreach sender $senders { + if {[catch { check_nick $sender } emsg]} { + error "invalid sender nick `$sender': $emsg" $errorInfo $errorCode + } + } + return $senders +} + +proc tell_delete_msgs {lsenders lrecip} { +FIXME - check callers pass l* not mixed case + set ninbound {} + set ndel 0 + foreach {s t m} [msgsdb_get $recip inbound] { + if {[llength $senders]} { + if {[lsearch -exact $senders [irctolower $s]] == -1} { + lappend ninbound $s $t $m + continue + } + } + set rsenders($s) 1 + incr ndel + } + msgsdb_set $recip inbound $ninbound + foreach s [array names rsenders] { + set noutbound {} + foreach {r t c} [msgsdb_get $s outbound] { + if {"[irctolower $r]" == "$lrecip"} continue + lappend noutbound $r $t $c + } + msgsdb_set $s outbound $noutbound + } + return $ndel +} def_ucmd untell { prefix_nick check_notonchan nick_securitycheck 0 - set peernicks + set recipients [tell_peernicks $text] + if {![llength $recipients]} { + usererror "You must say which recipients' messages from you to forget." + } + set ndel 0 + foreach recip $recipients { + incr ndel [tell_delete_msgs $n $recip] + } + ucmdr "Removed $ndel as yet undelivered message(s)." {} +} def_ucmd delmsg { global errorInfo errorCode @@ -1217,19 +1260,14 @@ def_ucmd delmsg { error "delmsg sec $sec" } } - set text [irctolower [string trim $text]] - set senders [split $text " "] - foreach sender $senders { - if {[catch { check_nick $sender } emsg]} { - error "invalid sender nick `$sender': $emsg" $errorInfo $errorCode - } - } - tell_delete_msgs [irctolower $senders] [irctolower $n] + set senders [tell_peernicks $text] + set ndel [tell_delete_msgs [irctolower $senders] [irctolower $n]] + if {!$ndel} { ucmdr "No incoming messages deleted." {} } switch -exact [llength $senders] { - 0 { ucmdr {} {} "deletes your message(s)." } - 1 { ucmdr {} {} "deletes your message(s) from $senders." } + 0 { ucmdr {} {} "deletes your $ndel message(s)." } + 1 { ucmdr {} {} "deletes your $ndel message(s) from $senders." } default { - ucmdr {} {} "deletes your message(s) from\ + ucmdr {} {} "deletes your $ndel message(s) from\ [lreplace $senders end end] and [lindex $senders end]." } } diff --git a/helpinfos b/helpinfos index 3e478b4..2cf8e7b 100644 --- a/helpinfos +++ b/helpinfos @@ -32,11 +32,11 @@ tell `help !untell' and `help !delmsg'. :untell -!untell [ ...] - Forgets about all message(s) you've sent with !tell, or those to - particular nick(s). Use !delmsg to delete messages sent *to* you. - There is no way to untell individual messages to the same nick. - If your nick is secure, you must !identify yourself to use untell. +!untell ... + Forgets about all message(s) you've sent with !tell to particular + nick(s). Use !delmsg to delete messages sent *to* you. There is no + way to untell individual messages to the same nick. If your nick is + secure, you must !identify yourself to use untell. :tellme !tellme repeats any messages you have outstanding.