Velocity proxy plugin to interact with Slack. Supports slash commands, DMs, and app mentions; can post ban/warn notifications when used with geSuit (e.g. via Snap).
- Velocity 3.4.x (API 3.4.0-SNAPSHOT)
- Java 21+
- ValioBungee (RedisBungee-Velocity) — optional; when present, enables geSuit ban/warn/unban notifications over Redis
mvn clean packageBuild with JDK 21 (required):
JAVA_HOME=/path/to/jdk21 mvn clean packageOutput: target/SlackControl-2.0.<buildNumber>-SNAPSHOT.jar (e.g. 2.0.0-SNAPSHOT locally).
Jenkins: The build number is taken from the BUILD_NUMBER environment variable when set (no -D needed). Use goals clean package or clean install (not build). Optional: pass -DbuildNumber=$BUILD_NUMBER if your job doesn’t expose env to Maven.
- Copy the built JAR into Velocity’s
plugins/folder. - Restart Velocity (or load the plugin).
- Edit
plugins/slackcontrol/config.ymland set your Slackbot_token,app_token, andwarn_channel(e.g.#warns-bans).
See config.yml (created on first run):
slack.bot_token— Bot token (xoxb-…)slack.app_token— App-level token for Socket Mode (xapp-…)slack.warn_channel— Channel for ban/warn notifications (e.g.#warns-bans)debug— Toggle debug logging (or use in-game:slackcontrol debug)
- In-game:
slackcontrol(requiresslackcontrol.command) — e.g.slackcontrol debug,slackcontrol status - Slack: Use
/mcbotor DM/mention the app; supported:who,help, etc.
SlackControl subscribes to ValioBungee Redis PubSub channels and posts to the configured Slack warn_channel when it receives messages. No direct geSuit plugin dependency; geSuit (or a bridge) publishes to these channels.
Channels: gesuit:ban, gesuit:warn, gesuit:unban
Payload (JSON, minimal): All events must include:
actionBy— staff who performed the action, orCONSOLEtargetUsername— target player usernametargetUuid— target player UUID (string)
Optional per event:
- gesuit:ban:
reason,type(name|ip|temp),until(ISO date for temp),ip - gesuit:warn:
reason,warnCount,action,actionExtra - gesuit:unban: only the common fields above
Publish via ValioBungee’s API: RedisBungeeAPI.getRedisBungeeApi().sendChannelMessage("gesuit:ban", jsonString) (and similarly for Bungee when geSuit runs there).