+proc tell_peernicks {text} {
+ global errorInfo errorCode
+ set text [irctolower [string trim $text]]
+ set senders [split $text " "]
+ foreach sender $senders {
+ if {[catch { check_nick $sender } emsg]} {
+ error "invalid nick `$sender': $emsg" $errorInfo $errorCode
+ }
+ }
+ return $senders
+}
+
+proc msgsdb_set_maydelete {n key l otherkey} {
+ msgsdb_set $n $key $l
+ if {[llength $l]} return
+ if {[llength [msgsdb_get $n $otherkey]]} return
+ msgsdb_delete $n
+}
+
+proc tell_delete_msgs {lsenders lrecip} {
+ set new_inbound {}
+ set ndel 0
+ foreach {s t m} [msgsdb_get $lrecip inbound] {
+ if {[llength $lsenders]} {
+ if {[lsearch -exact $lsenders [irctolower $s]] == -1} {
+ lappend new_inbound $s $t $m
+ continue
+ }
+ }
+ set rsenders($s) 1
+ incr ndel
+ }
+ msgsdb_set_maydelete $lrecip inbound $new_inbound outbound
+ if {![llength $new_inbound]} {
+ upvar #0 nick_telling($lrecip) telling
+ catch { unset telling }
+ }
+ foreach s [array names rsenders] {
+ set new_outbound {}
+ foreach {r t c} [msgsdb_get $s outbound] {
+ if {![ircnick_compare $r $lrecip]} continue
+ lappend new_outbound $r $t $c
+ }
+ msgsdb_set_maydelete $s outbound $new_outbound inbound
+ }
+ return $ndel
+}