Topic drift reminders and nudges now direct users to a specific channel (configurable via redirect_channel). Both static templates and LLM-generated redirects include the clickable channel mention. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
184 lines
7.3 KiB
YAML
184 lines
7.3 KiB
YAML
bot:
|
|
prefix: "!"
|
|
status: "Monitoring vibes..."
|
|
|
|
monitoring:
|
|
dry_run: false # Log analysis results to channel but don't warn/mute
|
|
enabled: true
|
|
channels: [] # Empty = monitor all channels. Add channel IDs to limit.
|
|
ignored_users: [] # User IDs to never monitor (bot owner, etc.)
|
|
immune_roles: [] # Role IDs that are immune to monitoring
|
|
|
|
sentiment:
|
|
warning_threshold: 0.6
|
|
mute_threshold: 0.65
|
|
spike_warning_threshold: 0.5 # Single message score that triggers instant warning
|
|
spike_mute_threshold: 0.7 # Single message score that triggers instant mute
|
|
context_messages: 8 # Number of previous messages to include as context
|
|
rolling_window_size: 10 # Number of messages to track per user
|
|
rolling_window_minutes: 15 # Time window for tracking
|
|
batch_window_seconds: 4 # Wait this long for more messages before analyzing (debounce)
|
|
escalation_threshold: 0.25 # Triage toxicity score that triggers re-analysis with heavy model
|
|
escalation_boost: 0.04 # Per-message drama boost after warning (sustained toxicity ramps toward mute)
|
|
|
|
game_channels:
|
|
gta-online: "GTA Online"
|
|
battlefield: "Battlefield"
|
|
warzone: "Call of Duty: Warzone"
|
|
cod-zombies: "Call of Duty: Zombies"
|
|
|
|
topic_drift:
|
|
enabled: true
|
|
use_llm: true # Generate redirect messages via LLM instead of static templates
|
|
redirect_channel: "general" # Channel to suggest for off-topic chat
|
|
ignored_channels: ["general"] # Channel names or IDs to skip topic drift monitoring
|
|
remind_cooldown_minutes: 10 # Don't remind same user more than once per this window
|
|
escalation_count: 3 # After this many reminds, DM the server owner
|
|
reset_minutes: 60 # Reset off-topic count after this much on-topic behavior
|
|
|
|
mention_scan:
|
|
enabled: true
|
|
scan_messages: 30 # Messages to scan per mention trigger
|
|
cooldown_seconds: 60 # Per-channel cooldown between scans
|
|
|
|
timeouts:
|
|
escalation_minutes: [30, 60, 120, 240] # Escalating timeout durations
|
|
offense_reset_minutes: 1440 # Reset offense counter after this much good behavior (24h)
|
|
warning_cooldown_minutes: 5 # Don't warn same user more than once per this window
|
|
warning_expiration_minutes: 30 # Warning expires after this long — user must be re-warned before mute
|
|
|
|
messages:
|
|
warning: "Easy there, {username}. The Breehavior Monitor is watching. \U0001F440"
|
|
mute_title: "\U0001F6A8 BREEHAVIOR ALERT \U0001F6A8"
|
|
mute_description: "{username} has been placed in timeout for {duration}.\n\nReason: Sustained elevated drama levels detected.\nDrama Score: {score}/1.0\nCategories: {categories}\n\nCool down and come back when you've resolved your skill issues."
|
|
topic_reminds:
|
|
- "Hey {username}, this is a gaming server 🎮 — take the personal stuff to {channel}."
|
|
- "{username}, sir this is a gaming channel. {channel} is right there."
|
|
- "Hey {username}, I don't remember this being a therapy session. Take it to {channel}. 🎮"
|
|
- "{username}, I'm gonna need you to take that energy to {channel}. This channel has a vibe to protect."
|
|
- "Not to be dramatic {username}, but this is wildly off-topic. {channel} exists for a reason. 🎮"
|
|
topic_nudges:
|
|
- "{username}, we've been over this. Gaming. Channel. {channel} for the rest. 🎮"
|
|
- "{username}, you keep drifting off-topic like it's a speedrun category. {channel}. Now."
|
|
- "Babe. {username}. The gaming channel. We talked about this. Go to {channel}. 😭"
|
|
- "{username}, I will not ask again (I will definitely ask again). {channel} for off-topic. 🎮"
|
|
- "{username}, at this point I'm keeping score. That's off-topic strike {count}. {channel} is waiting."
|
|
- "Look, {username}, I love the enthusiasm but this ain't the channel for it. {channel}. 🎮"
|
|
topic_owner_dm: "Heads up: {username} keeps going off-topic with personal drama in #{channel}. They've been reminded {count} times. Might need a word."
|
|
channel_redirect: "Hey {username}, that sounds like {game} talk — head over to {channel} for that!"
|
|
|
|
modes:
|
|
default_mode: roast
|
|
proactive_cooldown_messages: 8 # Minimum messages between proactive replies
|
|
|
|
default:
|
|
label: "Default"
|
|
description: "Hall-monitor moderation mode"
|
|
prompt_file: "personalities/chat_personality.txt"
|
|
proactive_replies: false
|
|
reply_chance: 0.0
|
|
moderation: full
|
|
|
|
chatty:
|
|
label: "Chatty"
|
|
description: "Friendly chat participant"
|
|
prompt_file: "personalities/chat_chatty.txt"
|
|
proactive_replies: true
|
|
reply_chance: 0.40
|
|
moderation: relaxed
|
|
relaxed_thresholds:
|
|
warning_threshold: 0.80
|
|
mute_threshold: 0.85
|
|
spike_warning_threshold: 0.70
|
|
spike_mute_threshold: 0.85
|
|
|
|
roast:
|
|
label: "Roast"
|
|
description: "Savage roast mode"
|
|
prompt_file: "personalities/chat_roast.txt"
|
|
proactive_replies: true
|
|
reply_chance: 0.60
|
|
moderation: relaxed
|
|
relaxed_thresholds:
|
|
warning_threshold: 0.85
|
|
mute_threshold: 0.90
|
|
spike_warning_threshold: 0.75
|
|
spike_mute_threshold: 0.90
|
|
|
|
hype:
|
|
label: "Hype"
|
|
description: "Your biggest fan"
|
|
prompt_file: "personalities/chat_hype.txt"
|
|
proactive_replies: true
|
|
reply_chance: 0.50
|
|
moderation: relaxed
|
|
relaxed_thresholds:
|
|
warning_threshold: 0.80
|
|
mute_threshold: 0.85
|
|
spike_warning_threshold: 0.70
|
|
spike_mute_threshold: 0.85
|
|
|
|
drunk:
|
|
label: "Drunk"
|
|
description: "Had a few too many"
|
|
prompt_file: "personalities/chat_drunk.txt"
|
|
proactive_replies: true
|
|
reply_chance: 0.60
|
|
moderation: relaxed
|
|
relaxed_thresholds:
|
|
warning_threshold: 0.85
|
|
mute_threshold: 0.90
|
|
spike_warning_threshold: 0.75
|
|
spike_mute_threshold: 0.90
|
|
|
|
english_teacher:
|
|
label: "English Teacher"
|
|
description: "Insufferable grammar nerd mode"
|
|
prompt_file: "personalities/chat_english_teacher.txt"
|
|
proactive_replies: true
|
|
reply_chance: 0.60
|
|
moderation: relaxed
|
|
relaxed_thresholds:
|
|
warning_threshold: 0.85
|
|
mute_threshold: 0.90
|
|
spike_warning_threshold: 0.75
|
|
spike_mute_threshold: 0.90
|
|
|
|
slutty:
|
|
label: "Slutty"
|
|
description: "Shamelessly flirty and full of innuendos"
|
|
prompt_file: "personalities/chat_slutty.txt"
|
|
proactive_replies: true
|
|
reply_chance: 0.60
|
|
moderation: relaxed
|
|
relaxed_thresholds:
|
|
warning_threshold: 0.85
|
|
mute_threshold: 0.90
|
|
spike_warning_threshold: 0.75
|
|
spike_mute_threshold: 0.90
|
|
|
|
polls:
|
|
enabled: true
|
|
duration_hours: 4
|
|
cooldown_minutes: 60 # Per-channel cooldown between auto-polls
|
|
|
|
|
|
coherence:
|
|
enabled: true
|
|
drop_threshold: 0.3 # How far below baseline triggers alert
|
|
absolute_floor: 0.5 # Don't alert if score is above this regardless
|
|
cooldown_minutes: 30 # Don't alert same user more than once per window
|
|
messages:
|
|
intoxicated: "Someone get {username} some water... or maybe cut them off."
|
|
tired: "{username} might need some sleep, that message was rough."
|
|
angry_typing: "{username} is typing so hard their keyboard is scared."
|
|
mobile_keyboard: "{username}'s thumbs are having a rough day."
|
|
language_barrier: "Having trouble there, {username}? Take your time."
|
|
default: "You okay there, {username}? That message was... something."
|
|
|
|
reactions:
|
|
enabled: false
|
|
chance: 0.15 # Probability of evaluating a message for reaction
|
|
cooldown_seconds: 45 # Per-channel cooldown between reactions
|
|
excluded_channels: [] # Channel names or IDs to skip reactions in
|