diff --git a/Configuration.md b/Configuration.md index 266b227..fda4ed9 100644 --- a/Configuration.md +++ b/Configuration.md @@ -70,6 +70,12 @@ An audit channel for the incident feed. Notable actions are announced there; pri [log] channel = "#services" +`notify_exclude` is an optional list of masks whose users [OperServ NOTIFY](Services#operserv-network-operator-tools) never matches, so they cannot flood the feed. The classic case is PyLink relay clients — their nicks carry a `/network` suffix — so `"*/*"` silences every relayed user in one line. It accepts nick globs, `user@host`, or extbans (the same syntax as a NOTIFY mask), and is reloadable with `OperServ REHASH` (no restart). + + [log] + channel = "#services" + notify_exclude = ["*/*"] # ignore PyLink relay clients (nick/network) + ## [expire] Inactivity expiry. Accounts not identified to, and channels not joined, past the threshold are dropped on a periodic pass. Opers, live sessions, occupied channels, and NOEXPIRE records are spared. A zero or omitted field leaves that kind never expiring. diff --git a/Services.md b/Services.md index 38447f3..e7226f0 100644 --- a/Services.md +++ b/Services.md @@ -24,7 +24,31 @@ SEND, LIST, READ, DEL. Memos are stored on the account and delivered whether or ## OperServ, network operator tools -AKILL and other X-lines, DEFCON, JUPE, SESSION limits and exceptions, IGNORE, GLOBAL, KILL, KICK, MODE, SVS tools, STATS, and LOGSEARCH over the incident log. Typed operator privileges gate each command. +AKILL and other X-lines, FORBID, SPAMFILTER, NOTIFY, DEFCON, JUPE, SESSION limits and exceptions, IGNORE, GLOBAL, KILL, KICK, MODE, SVS tools, STATS, and LOGSEARCH over the incident log. Typed operator privileges gate each command. + +### NOTIFY, an operator watch list + +`NOTIFY ADD + ` watches a mask; matching users have their flagged events announced to the staff feed (as DebugServ, tagged `[NOTIFY]`). Also `DEL `, `LIST`/`VIEW [pattern]`, and `CLEAR`. Admin only. + +- **Mask** — a `nick!user@host` pattern, a bare nick glob (`baddie*`), or a `#channel` (watches everyone who joins a matching channel). +- **Flags** — `c` connect, `d` disconnect, `j` join, `p` part, `n` nick change, `t` topic, `s` services command, `S` services SET; `*` for all. +- **Expiry** — `+30d`, `+12h`, `+45m`, or `+0` for permanent. + + /msg OperServ NOTIFY ADD +0 cdn baddie*!*@* known ban-evader + /msg OperServ NOTIFY ADD +7d j #recruiting watch who joins during the drive + +**Keeping relay clients out of the feed.** A broad watch — a channel watch especially — will match every PyLink-relayed user (their nicks carry a `/network` suffix) and flood the log. Set the exclude list once and reload it live, no restart: + + # in config.toml + [log] + channel = "#services" + notify_exclude = ["*/*"] # any nick with a "/" is a relay client + + # then, as an operator: + /msg OperServ REHASH + -OperServ- Configuration reloaded from /etc/echo/config.toml. + +Excluded users are skipped by *every* watch, so genuine locals still surface while the relay noise is gone. The list also accepts `user@host` and extbans, e.g. `["*/fun", "*!*@relay.example"]`. See [Configuration → [log]](Configuration#log). ## StatServ, statistics