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.
Commit
4dd84aa46da16a1fe06e22bf693878d27cdbde676a25a93822d34cc261e20ba5
Parent
29817cfd96a8982…
1 file changed
+9
-1
+9
-1
| --- internal/bots/warden/warden.go | ||
| +++ internal/bots/warden/warden.go | ||
| @@ -310,11 +310,19 @@ | ||
| 310 | 310 | switch action { |
| 311 | 311 | case ActionWarn: |
| 312 | 312 | cl.Cmd.Notice(nick, fmt.Sprintf("warden: warning — %s in %s", reason, channel)) |
| 313 | 313 | case ActionMute: |
| 314 | 314 | 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 | + }() | |
| 316 | 324 | case ActionKick: |
| 317 | 325 | cl.Cmd.Kick(channel, nick, "warden: "+reason) |
| 318 | 326 | } |
| 319 | 327 | } |
| 320 | 328 | |
| 321 | 329 |
| --- 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 |