Home /Docs /Slack

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

  1. Create a Slack app at api.slack.com/apps
  2. Bot scopes: chat:write, channels:history, groups:history, channels:read, groups:read, users:read, kick/manage scopes as needed, commands
  3. Event Subscriptions URL: …/api/slack/events β€” events: message.channels, message.groups, member_joined_channel, member_left_channel, app_mention
  4. Slash Commands URL: …/api/slack/commands
  5. Interactivity Request URL: …/api/slack/interactions (report buttons)
  6. Env: SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET
  7. [slack] enabled = true in config.toml
  8. 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.

← All docsΒ· Dashboard