Make every pseudo-client a first-class default service

GroupServ, ChanFix, ReportServ, HelpServ and DiceServ were left out of
the default service suite, so they came up only when explicitly opted
in — an add-on tier the others don't have. They are core services like
any other: put them in default_services() so the standard suite is the
full set of pseudo-clients, and correct the stale 'NickServ + ChanServ'
default in the config comment, main.rs, README and MODULES.
This commit is contained in:
Jean Chevronnet 2026-07-14 15:02:13 +00:00
parent de11939f2e
commit dfc11bd1c4
No known key found for this signature in database
3 changed files with 16 additions and 7 deletions

View file

@ -20,7 +20,8 @@ pub struct Config {
// Absent = it does not start. Bind to localhost; a token is required.
#[serde(default)]
pub jsonrpc: Option<JsonRpc>,
// Which service modules to start. Absent = the built-in NickServ + ChanServ.
// Which service modules to start. Absent = the full standard suite (all the
// pseudo-clients); listing it trims that set. Every service is first-class.
#[serde(default)]
pub modules: Modules,
// Services operators: accounts granted privileges. Absent = no opers.
@ -132,8 +133,16 @@ impl Default for Modules {
}
}
// The full standard suite: every pseudo-client is a first-class service and
// comes up by default. An admin trims the list; there is no second tier.
fn default_services() -> Vec<String> {
vec!["nickserv".to_string(), "chanserv".to_string(), "botserv".to_string(), "memoserv".to_string(), "statserv".to_string(), "hostserv".to_string(), "operserv".to_string(), "infoserv".to_string()]
[
"nickserv", "chanserv", "botserv", "hostserv", "memoserv", "operserv", "statserv",
"groupserv", "infoserv", "reportserv", "helpserv", "chanfix", "diceserv",
]
.iter()
.map(|s| s.to_string())
.collect()
}
#[derive(Debug, Deserialize, Clone)]

View file

@ -53,9 +53,9 @@ async fn main() -> Result<()> {
ts,
));
// Bring up the service modules named in [modules] (default NickServ +
// ChanServ). Each keeps a fixed uid suffix so its identity is stable no
// matter which others are enabled.
// Bring up the service modules named in [modules] (default: the full
// standard suite — every pseudo-client). Each keeps a fixed uid suffix so
// its identity is stable no matter which others are enabled.
let enabled = |name: &str| cfg.modules.services.iter().any(|s| s == name);
let mut services: Vec<Box<dyn engine::service::Service>> = Vec::new();
if enabled("nickserv") {