delayjoin +D: hide JOINs until a member speaks/reveals (NAMES + part/quit/nick aware)

This commit is contained in:
Jean Chevronnet 2026-08-09 07:40:10 +00:00
parent 80cc61e7f8
commit 97a35338fa
6 changed files with 134 additions and 7 deletions

View file

@ -451,9 +451,13 @@ impl Server {
let mut seen: HashSet<Uid> = HashSet::new();
for key in &user.channels {
if let Some(ch) = self.channels.get_mut(key) {
// +D delayjoin: if their JOIN here was never announced, no QUIT either
let hidden = ch.members.get(&uid).map(|m| m.hidden).unwrap_or(false);
ch.members.remove(&uid);
for &m in ch.members.keys() {
seen.insert(m);
if !hidden {
for &m in ch.members.keys() {
seen.insert(m);
}
}
}
}