nickserv: AJOIN auto-join list

Adds the account auto-join list (AJOIN ADD/DEL/LIST): NickServ SVSJOINs you
into your listed channels each time you identify. The list is a typed
Vec<AjoinEntry> on the account, folded through the event log like the cert and
akick lists (persists and replays; no separate store), reached by modules
through the Store trait. New ForceJoin action serialises to InspIRCd SVSJOIN.
Shown in INFO. Operates on the caller's own account; the oper form for other
users waits on a privilege system.
This commit is contained in:
Jean Chevronnet 2026-07-13 02:09:03 +00:00
parent e0bb3a1fea
commit 75ba9b35b4
No known key found for this signature in database
9 changed files with 211 additions and 5 deletions

View file

@ -122,6 +122,8 @@ fn to_wire(entry: &LogEntry) -> Option<ReplicationEvent> {
Event::CertAdded { .. }
| Event::CertRemoved { .. }
| Event::AccountPasswordSet { .. }
| Event::AjoinAdded { .. }
| Event::AjoinRemoved { .. }
| Event::ChannelMlock { .. }
| Event::ChannelAccessAdd { .. }
| Event::ChannelAccessDel { .. }
@ -351,6 +353,7 @@ mod tests {
scram512: None,
certfps: vec!["deadbeef".into()],
verified: true,
ajoin: vec![],
};
let registered = LogEntry::for_test("A", 0, 1, Event::AccountRegistered(acct));
let wire = to_wire(&registered).expect("account registration replicates");