link: stop services re-locking +r on every join — track the registered channel mode, keep +r channels alive when empty, use ijoin not fjoin for incremental joins, and consume s2s channel-mode params through the registry

This commit is contained in:
Jean Chevronnet 2026-08-15 13:20:04 +00:00
parent 62f901bdc8
commit 3fa9737ccb
5 changed files with 92 additions and 26 deletions

View file

@ -83,7 +83,14 @@ impl Command for Tban {
});
}
s.to_channel(&key, &format!(":{prefix} MODE {chan} +b {mask}"), None);
s.propagate_from_user(uid, &format!("MODE {chan} +b {mask}"));
// links: a channel mode must go out as a timestamped FMODE, not a plain
// MODE (services ignore channel-targeted MODE)
let src = s
.users
.get(&uid)
.map(|u| u.uuid.clone())
.unwrap_or_else(|| s.sid.clone());
s.propagate_chan_mode(&src, chan, "+b", std::slice::from_ref(&mask));
CmdResult::Ok
}
}