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.