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
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]."
}
}
`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.