Slack
Full workspace moderation: HTTP Events, Socket Mode, slash commands, and the same core filters as Discord.
What is included
Guild key: slack:{TEAM_ID} (workspace-wide). Channel IDs for exemptions and destinations.
- Filters: link, threat-URL, flood, automod (text + attachments)
- Community: leveling (/rank, /levels), welcome/goodbye on channel join/leave, custom commands
- Reports:
/report @user reasonβ staff channel with Mark handled / Acknowledge buttons - Watchlist:
/watch add|remove|listβ alerts on channel join/message - Scheduled messages + social alerts post into Slack channels when the guild is
slack:β¦ - Cases: recorded + optional mod-log + outbound webhooks (
case/threat/report/watch) - Slash + in-channel admin commands (see below)
- Delivery: HTTP Events API and/or Socket Mode
Not ported (Discord-only by design): anti-nuke / structure snapshots, reaction roles, temp voice, tickets, Discord role jail.
Multi-workspace: one Slack app + optional SLACK_EXTRA_BOT_TOKENS=T1:xoxb-β¦,T2:xoxb-β¦ for per-install bot tokens (shared signing secret / Socket Mode).
Enforcement mapping
- Delete β
chat.delete - Warn β
chat.postEphemeral - Jail / timeout β
conversations.kick+ strike - Mod-log β post to configured channel ID
Workspace admins / owners are never moderated.
Slash commands
Register these in the Slack app (same Request URL as events, or the dedicated commands URL):
/reportΒ·/watchΒ·/modstatusΒ·/modhelp/setfilterΒ·/whitelistΒ·/setfloodΒ·/setautomodΒ·/blocklistΒ·/setthreat/strikesΒ·/rankΒ·/levels
Admins can also use in-channel !modstatus, !watch, !setfilter enabled=true, etc. Members: !report @user reason.
Command Request URL: https://YOUR_DASHBOARD/api/slack/commands Β· Interactivity: β¦/api/slack/interactions
HTTP setup
- Create a Slack app at api.slack.com/apps
- Bot scopes:
chat:write,channels:history,groups:history,channels:read,groups:read,users:read, kick/manage scopes as needed,commands - Event Subscriptions URL:
β¦/api/slack/eventsβ events:message.channels,message.groups,member_joined_channel,member_left_channel,app_mention - Slash Commands URL:
β¦/api/slack/commands - Interactivity Request URL:
β¦/api/slack/interactions(report buttons) - Env:
SLACK_BOT_TOKEN,SLACK_SIGNING_SECRET [slack] enabled = truein config.toml- Invite the bot into channels; configure in the dashboard (SL tag)
Socket Mode (no public URL)
Generate an App-Level Token with connections:write β set SLACK_APP_TOKEN=xapp-β¦. Enable Socket Mode in the app. The bot opens a WebSocket via apps.connections.open and receives events, slash commands, and interactivity without exposing HTTP (HTTP routes still work if the dashboard is public).
Standalone Slack bind (ops)
If Slack HTTP is bound separately from the main dashboard, it listens on [slack].bind (default 127.0.0.1:8091). Reverse-proxy /api/slack/* there. On the public hosted product this is already handled for you.