chiark / gitweb /
finished tell_delete_msgs. Maybe all right. Check fixmes and test.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 12 Feb 2002 15:56:06 +0000 (15:56 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 12 Feb 2002 15:56:06 +0000 (15:56 +0000)
bot.tcl
helpinfos

diff --git a/bot.tcl b/bot.tcl
index 0fd2b75deb6513795f07d4546663c8746c9fda3e..dc8ed93883837fd0be46a44973cf7335a87a882e 100755 (executable)
--- 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]."
        }
     }
index 3e478b4dc332342db2e8d5a8f209c06f8d863d10..2cf8e7b09ff182e01533abe6502275fb8f6ce647 100644 (file)
--- a/helpinfos
+++ b/helpinfos
@@ -32,11 +32,11 @@ tell <nick> <message ...>
  `help !untell' and `help !delmsg'.
 
 :untell
-!untell [<nick> ...]
- 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 <nick> ...
+ 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.