ScuttleBot

fix: warden uses extended ban m: for muting instead of +q (#111) +q in Ergo is channel owner, not quiet. Use +b m:nick!*@* extended ban for actual muting. Mute auto-expires after cooldown period. Escalation chain is now: warn → mute (extended ban) → kick.

lmata 2026-04-05 03:56 trunk
Commit 4dd84aa46da16a1fe06e22bf693878d27cdbde676a25a93822d34cc261e20ba5
--- internal/bots/warden/warden.go
+++ internal/bots/warden/warden.go
@@ -310,11 +310,19 @@
310310
switch action {
311311
case ActionWarn:
312312
cl.Cmd.Notice(nick, fmt.Sprintf("warden: warning — %s in %s", reason, channel))
313313
case ActionMute:
314314
cl.Cmd.Notice(nick, fmt.Sprintf("warden: muted in %s — %s", channel, reason))
315
- cl.Cmd.Mode(channel, "+q", nick)
315
+ // Use extended ban m: to mute — agent stays in channel but cannot speak.
316
+ mask := "m:" + nick + "!*@*"
317
+ cl.Cmd.Mode(channel, "+b", mask)
318
+ // Remove mute after cooldown so the agent can recover.
319
+ cs := b.channelStateFor(channel)
320
+ go func() {
321
+ time.Sleep(cs.cfg.CoolDown)
322
+ cl.Cmd.Mode(channel, "-b", mask)
323
+ }()
316324
case ActionKick:
317325
cl.Cmd.Kick(channel, nick, "warden: "+reason)
318326
}
319327
}
320328
321329
--- internal/bots/warden/warden.go
+++ internal/bots/warden/warden.go
@@ -310,11 +310,19 @@
310 switch action {
311 case ActionWarn:
312 cl.Cmd.Notice(nick, fmt.Sprintf("warden: warning — %s in %s", reason, channel))
313 case ActionMute:
314 cl.Cmd.Notice(nick, fmt.Sprintf("warden: muted in %s — %s", channel, reason))
315 cl.Cmd.Mode(channel, "+q", nick)
 
 
 
 
 
 
 
 
316 case ActionKick:
317 cl.Cmd.Kick(channel, nick, "warden: "+reason)
318 }
319 }
320
321
--- internal/bots/warden/warden.go
+++ internal/bots/warden/warden.go
@@ -310,11 +310,19 @@
310 switch action {
311 case ActionWarn:
312 cl.Cmd.Notice(nick, fmt.Sprintf("warden: warning — %s in %s", reason, channel))
313 case ActionMute:
314 cl.Cmd.Notice(nick, fmt.Sprintf("warden: muted in %s — %s", channel, reason))
315 // Use extended ban m: to mute — agent stays in channel but cannot speak.
316 mask := "m:" + nick + "!*@*"
317 cl.Cmd.Mode(channel, "+b", mask)
318 // Remove mute after cooldown so the agent can recover.
319 cs := b.channelStateFor(channel)
320 go func() {
321 time.Sleep(cs.cfg.CoolDown)
322 cl.Cmd.Mode(channel, "-b", mask)
323 }()
324 case ActionKick:
325 cl.Cmd.Kick(channel, nick, "warden: "+reason)
326 }
327 }
328
329

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button