A Discord bot for voice channel votekicking during screenshares
- Slash commands —
/pingand/votekick - Voice-channel aware —
/votekickvalidates that the caller and target are in the same voice channel and that the target is screensharing - Reaction-based polls — members vote ✅ or ❌; polls auto-complete and disconnect the target when the vote passes
- Configurable durations — default, minimum, and maximum poll durations are set via environment variables
Streamocracy is a Discord bot driven entirely by slash commands. After inviting it to your server, type / in any channel to see the available commands.
| Command | Arguments | Description |
|---|---|---|
/ping | None | Responds with Pong! 🏓 to verify the bot is responsive |
/votekick | user (required), duration (opt) | Start a votekick poll against a user who is screensharing |
- You must be in a voice channel.
- The target user must be in the same voice channel and currently screensharing.
- Optionally override the poll duration in seconds.
- Members vote ✅ (yes) or ❌ (no).
- The vote passes if there are at least 2 yes votes and yes votes exceed no votes. If it passes, the target is disconnected from the voice channel.
Configuration is loaded from environment variables. A .env file can be used for local development.
| Variable | Required | Default | Description |
|---|---|---|---|
DISCORD_TOKEN | Yes | - | Discord bot token from Developer Portal |
GUILD_ID | No | - | Guild ID for instant command registration (testing) |
LOG_LEVEL | No | info | Log level filter (trace, debug, info, warn, error) |
LOG_FORMAT | No | pretty | Log output format: pretty or json |
DEFAULT_VOTEKICK_DURATION | No | 60 | Default votekick duration in seconds |
MIN_VOTEKICK_DURATION | No | 10 | Minimum votekick duration in seconds |
MAX_VOTEKICK_DURATION | No | 300 | Maximum votekick duration in seconds |
RESULTS_DELETE_DELAY | No | 10 | Results message deletion delay in seconds |
MIN_VOTEKICK_YES_VOTES | No | 2 | Minimum ✅ votes needed for a votekick to pass |
VOTEKICK_RATE_LIMIT_SECS | No | 60 | Cooldown per initiator in the same guild/channel |
POLL_STATE_FILE | No | poll_state.json | Path to active poll persistence file |
export DISCORD_TOKEN="your-bot-token"export GUILD_ID="your-guild-id"# optional, for instant slash command updates
cargo run --releaseFor Docker Compose, binary releases, and a full setup walkthrough, see GUIDE.md.