- if {![info exists names_chans]} { set names_chans {} }
- set chan [irctolower $chan]
- lappend names_chans $chan
- channel_noone_seen $chan
- foreach n [split $nicklist { }] {
- regsub {^[@+]} $n {} n
- if {![string length $n]} continue
- check_nick $n
- upvar #0 nick_onchans($n) oc
- lappend oc $chan
- nick_ishere $n
+ set lchan [irctolower $chan]
+ upvar #0 chan_nicks($lchan) nlist
+ lappend names_chans $lchan
+ if {![info exists nlist]} {
+ # We don't think we're on this channel, so ignore it !
+ # Unfortunately, because we don't get a reply to PART,
+ # we have to remember ourselves whether we're on a channel,
+ # and ignore stuff if we're not, to avoid races. Feh.
+ return
+ }
+ set nlist_new {}
+ foreach user [split $nicklist { }] {
+ regsub {^[@+]} $user {} user
+ if {![string length $user]} continue
+ check_nick $user
+ set luser [irctolower $user]
+ upvar #0 nick_onchans($luser) oc
+ lappend oc $lchan
+ lappend nlist_new $luser
+ nick_ishere $user