Complete reference for all KoolBot commands with examples and detailed explanations.
Note: All commands must be enabled through configuration before they appear in Discord.
Use/config set key:command.enabled value:trueand then/config reloadto enable commands.
- User Commands - Available to all server members
- Admin Commands - Require Administrator permission
- /setup - Interactive setup wizard (recommended for first-time setup)
- /config - Configuration management
- /permissions - Role-based access control
- /vc - Voice channel management
- Configuration Management - Detailed
/configcommand guide - Quick Command Reference - Summary table
Commands available to all server members.
Description: Check if the bot is responding and measure latency.
Configuration:
/config set key:ping.enabled value:true
/config reloadUsage:
/pingResponse:
Pong! 🏓
Bot Latency: 45ms
API Latency: 123ms
Use Cases:
- Verify bot is online and responsive
- Check connection quality
- Troubleshoot lag issues
Description: Get help with KoolBot commands. Lists all available commands or shows detailed information about a specific command.
Note: This is a core command that is always enabled and does not require configuration.
Usage:
/help # List all commands
/help command:ping # Get detailed help for a specific commandParameters:
command(optional) - Name of the command to get detailed help for
Example Responses:
# List all commands
📚 KoolBot Help
✅ Enabled Commands
/ping - Check if the bot is responding and measure latency.
/help - Get help with KoolBot commands.
...
# Specific command help
📖 Help: /ping
Check if the bot is responding and measure latency.
Usage: /ping
Status: ✅ Enabled
Use Cases:
- Discover available commands
- Learn command syntax
- Check if a command is enabled
- New user onboarding
Description: Voice channel statistics and leaderboards. This unified command combines leaderboard (top) and personal stats (user) functionality.
Configuration:
# Requires voice tracking to be enabled
/config set key:voicetracking.enabled value:true
/config reload
# Optional: Enable individual subcommands
/config set key:voicetracking.stats.top.enabled value:true
/config set key:voicetracking.stats.user.enabled value:true
/config reloadDescription: View voice channel activity leaderboards showing top users by time spent.
Usage:
/voicestats top
/voicestats top limit:20
/voicestats top period:month
/voicestats top period:alltime limit:10Parameters:
limit(optional) - Number of users to display (1-50, default: 10)period(optional) - Time period:week,month,alltime(default: week)
Example Response:
Top Voice Channel Users (week):
🥇 Alice: 24h 15m
🥈 Bob: 18h 32m
🥉 Charlie: 12h 45m
4. David: 8h 20m
5. Emma: 6h 10mUse Cases:
- See who's most active in voice channels
- Create friendly competition
- Recognize community engagement
Description: View personal voice channel statistics and activity history for yourself or another user.
Usage:
/voicestats user
/voicestats user user:@Alice
/voicestats user period:month
/voicestats user user:@Alice period:alltimeParameters:
user(optional) - The user to show statistics for (defaults to yourself)period(optional) - Time period:week,month,alltime(default: week)
Example Response:
Voice Channel Statistics for Alice (week):
Total Time: 24h 15m
Last Seen: 2026-01-29 12:00:00
Recent Sessions:
• Gaming Room: 3h 45m
• Study Hall: 2h 15m
• Music Lounge: 1h 30mUse Cases:
- Track your own voice channel usage
- View another user's activity
- See activity trends
- Check recent session history
Description: Check when a user was last active in voice channels.
Configuration:
/config set key:voicetracking.enabled value:true
/config set key:voicetracking.seen.enabled value:true
/config reloadUsage:
/seen user:@UsernameParameters:
user(required) - The user to look up
Example Response:
👤 Alice was last seen:
🕐 2 hours ago
📍 In: Gaming Room
⏱️ Duration: 3h 45mUse Cases:
- Check if someone has been online recently
- See what channel they were in
- Track member activity patterns
Description: View earned badges and achievements from voice channel activity. Displays persistent accolades earned through milestones and participation.
Configuration:
# Enable achievements system
/config set key:achievements.enabled value:true
/config reloadUsage:
/achievements # View your own achievements
/achievements user:@Username # View another user's achievementsParameters:
user(optional) - The user to view achievements for (defaults to yourself)
Example Response:
🏆 Alice's Achievements
🎖️ Accolades (Permanent)
🎉 First Steps - 12 hrs
Spent your first hour in voice chat
Earned: 2026-01-10
🎖️ Voice Veteran - 150 hrs
Reached 100 hours in voice chat
Earned: 2026-01-15
🏃 Marathon Runner - 6 hrs
Completed a 4+ hour voice session
Earned: 2026-01-12
🦋 Social Butterfly - 15 users
Voiced with 10+ unique users
Earned: 2026-01-14
📊 Summary
Total Accolades: 4
Total Achievements: 0
Available Accolades:
- 🎉 First Steps - Spent your first hour in voice chat
- 🎖️ Voice Veteran - Reached 100 hours
- 🏅 Voice Elite - Reached 500 hours
- 🏆 Voice Master - Reached 1000 hours
- 👑 Voice Legend - Reached 8765 hours (1 year!)
- 🏃 Marathon Runner - Completed a 4+ hour session
- 🦸 Ultra Marathoner - Completed an 8+ hour session
- 🦋 Social Butterfly - Voiced with 10+ unique users
- 🤝 Connector - Voiced with 25+ unique users
- 🦉 Night Owl - 50+ hours late night (10 PM - 6 AM UTC)
- 🐦 Early Bird - 50+ hours early morning (6 AM - 10 AM UTC)
- 🎮 Weekend Warrior - 100+ hours on weekends
- 💼 Weekday Warrior - 100+ hours on weekdays
- 🔥 On a Roll - Connected for 7 consecutive days (5+ min/day)
- ⚡ Dedicated AF - Connected for 14 consecutive days (5+ min/day)
- 💀 No-Lifer - Connected for 30 consecutive days (5+ min/day)
- 🗣️ Quotable - Been quoted for the first time
- 📝 Quote Master - Added 10 quotes to the collection
- 📚 Quote Collector - Added 50 quotes to the collection
- 🏆 Quote Legend - Added 100 quotes to the collection
- ⭐ Widely Quoted - Been quoted 25 times
- 💫 Quote Icon - Been quoted 50 times
- 🔥 Viral Quote - Have a quote with 10+ likes
Note on Time-Based Accolades:
- Night Owl and Early Bird times are calculated in UTC timezone (the bot's server time)
- These times may differ from your local timezone depending on your location
- Weekend Warrior and Weekday Warrior use UTC for determining day of week
- Calculate your local time offset from UTC to know when these periods occur in your timezone
Notification System:
When you earn a new accolade, you'll receive:
- A DM from the bot with details about your achievement
- Announcement in the weekly voice stats channel
Use Cases:
- Track your voice activity milestones
- View your collection of earned badges
- Compare achievements with friends
- Get motivated to participate more
Description: Add and manage memorable quotes in a dedicated bot-managed channel. All quotes are posted in a channel where users can react with 👍/👎.
Configuration:
# Enable quotes and set channel
/config set key:quotes.enabled value:true
/config set key:quotes.channel_id value:"YOUR_CHANNEL_ID"
/config set key:quotes.cooldown value:60
/config set key:quotes.max_length value:1000
/config reloadSubcommands:
Add a new quote to the quote channel.
Usage:
/quote add text:"Great quote!" author:@AliceParameters:
text(required): The quote text to addauthor(required): The user who said the quote (mention/select the user)
Example Response:
✅ Quote added successfully and posted to the quote channel!
Edit an existing quote that you added.
Usage:
/quote edit id:"697bdfe2808f7d245289392c" text:"Updated quote!"
/quote edit id:"697bdfe2808f7d245289392c" author:@Bob
/quote edit id:"697bdfe2808f7d245289392c" text:"New text" author:@BobParameters:
id(required): The quote ID (found in the quote footer in the channel)text(optional): The new quote textauthor(optional): The new author (mention/select the user)
Notes:
- You can only edit quotes that you added
- At least one field (text or author) must be provided
- The quote message in the channel will be updated automatically
Example Response:
✅ Quote updated successfully!
How It Works:
- User submits a quote using
/quote addcommand - Bot posts the quote as an embed in the configured quote channel
- Bot automatically adds 👍 and 👎 reactions to the message
- Users browse quotes by scrolling through the channel
- Users react with 👍 or 👎 to vote on quotes
- Users can edit their own quotes using
/quote editwith the quote ID - Bot automatically cleans up any unauthorized messages (every 5 minutes)
- An informational header post explains the channel usage (auto-recreated if deleted)
Security Features:
- Strict Permissions: Channel is automatically configured so only the bot can post messages
- Auto-Cleanup: Removes any non-bot messages every 5 minutes (configurable)
- User Access: Users can view, read history, and add reactions only
- Informational Header: Pinned post explains how the quote channel works
Example Response:
✅ Quote added successfully and posted to the quote channel!
Quote Display in Channel:
Each quote appears as an embed with:
- The quote text
- Author (mentioned user)
- Who added it
- Quote ID (in footer)
- 👍 and 👎 reactions for voting
Advanced Configuration:
# Restrict who can add quotes (role IDs)
/config set key:quotes.add_roles value:"123456789,987654321"
# Set maximum quote length
/config set key:quotes.max_length value:500
# Set cooldown between adding quotes (seconds)
/config set key:quotes.cooldown value:120
# Set cleanup interval (minutes, default: 5)
/config set key:quotes.cleanup_interval value:10
# Disable header post (default: enabled)
/config set key:quotes.header_enabled value:false
# Disable header pinning (default: enabled)
/config set key:quotes.header_pin_enabled value:falseUse Cases:
- Preserve memorable server moments
- Create a community quote wall
- Natural browsing via channel scroll
- Engage through Discord reactions
- Simple, streamlined quote management
- Protected channel prevents spam/abuse
Setup Steps:
- Create a dedicated text channel for quotes (e.g., #quotes)
- Get the channel ID (right-click channel → Copy ID)
- Configure:
/config set key:quotes.channel_id value:"CHANNEL_ID" - Enable:
/config set key:quotes.enabled value:true - Reload:
/config reload - Bot will automatically set strict permissions on the channel
Description: Manage server notices in a protected bot-controlled channel. Perfect for server rules, game server info, bot feature help, and important announcements.
Configuration:
# Enable notices and set channel
/config set key:notices.enabled value:true
/config set key:notices.channel_id value:"YOUR_CHANNEL_ID"
/config reloadSubcommands:
Add a new notice to the channel.
Parameters:
title(required) - Notice title (max 256 characters)content(required) - Notice content (max 4000 characters)category(required) - Category: General, Rules, Information, Help, or Game Serversorder(optional) - Display order (lower numbers appear first, default: 0)
Usage:
/notice add title:"Server Rules" content:"1. Be respectful\n2. No spam..." category:"Rules" order:1
/notice add title:"Minecraft Server" content:"IP: mc.example.com\nPort: 25565" category:"Game Servers" order:10
/notice add title:"Bot Commands Help" content:"Use /help to see available commands" category:"Help" order:20Edit an existing notice.
Parameters:
id(required) - Notice ID (visible in notice channel footer)title(optional) - New titlecontent(optional) - New contentcategory(optional) - New categoryorder(optional) - New display order
Usage:
/notice edit id:"abc123" title:"Updated Rules" content:"New rules text..."
/notice edit id:"abc123" order:5Delete a notice.
Parameters:
id(required) - Notice ID (visible in notice channel footer)
Usage:
/notice delete id:"abc123"Note: You can find notice IDs by viewing the notices in the channel - each notice shows its ID in the footer.
Recreate all notices in the channel (useful after cleanup or channel issues).
Usage:
/notice syncHow It Works:
- Admin creates notices using
/notice addwith title, content, and category - Bot posts each notice as a rich embed in the configured notices channel
- Bot automatically creates a "Bot Features" notice listing enabled features
- Notices are displayed in order by category, then by custom order number
- Channel is read-only for regular users (only bot can post)
- Bot automatically removes any unauthorized messages every 5 minutes
- An informational header post explains the channel purpose (auto-recreated if deleted)
- Notices persist in database and survive bot restarts
- Notice IDs are visible in each notice's footer for editing/deletion
Security Features:
- Strict Permissions: Channel is automatically configured so only the bot can post messages
- Auto-Cleanup: Removes any non-bot messages every 5 minutes (configurable)
- User Access: Users can view, read history, and add reactions only
- Persistent: Notices stored in MongoDB, auto-repost on bot restart
- Informational Header: Pinned post explains the channel's purpose
Notice Categories:
- 📋 General - General server information
- 📜 Rules - Server rules and guidelines
- ℹ️ Information - Important server info
- ❓ Help - Bot feature help and guides
- 🎮 Game Servers - Game server connection information
Advanced Configuration:
# Set cleanup interval (minutes, default: 5)
/config set key:notices.cleanup_interval value:10
# Disable header post (default: enabled)
/config set key:notices.header_enabled value:false
# Disable header pinning (default: enabled)
/config set key:notices.header_pin_enabled value:falseUse Cases:
- Post server rules that can't be deleted/modified by users
- Share game server connection info that stays up-to-date
- Provide bot feature help and usage guides
- Important announcements that need to stay visible
- Protected information channel that prevents spam
Setup Steps:
- Create a dedicated text channel for notices (e.g., #notices or #info)
- Get the channel ID (right-click channel → Copy ID)
- Configure:
/config set key:notices.channel_id value:"CHANNEL_ID" - Enable:
/config set key:notices.enabled value:true - Reload:
/config reload - Bot will automatically set strict permissions on the channel
- Add your first notice:
/notice add title:"Welcome" content:"Welcome to our server!" category:"General"
Permissions:
- Everyone can view quotes in the channel
- Everyone can add reactions to quotes
- Only bot can post messages (auto-configured)
- Adding quotes via command respects
quotes.add_rolesconfiguration (empty = everyone can add)
Description: Check if you have a specific role (for role verification).
Configuration:
/config set key:amikool.enabled value:true
/config set key:amikool.role.name value:"Kool Members"
/config reloadUsage:
/amikoolExample Responses:
✅ Yes, you are kool! You have the "Kool Members" role.
❌ Sorry, you don't have the "Kool Members" role.
Use Cases:
- Fun role verification
- Check membership status
- Confirm permissions
Commands that require Administrator permission in Discord.
Description: Comprehensive configuration management for all bot settings.
Usage:
/config list # List all settings
/config get key:ping.enabled # Get specific setting
/config set key:ping.enabled value:true # Set a value
/config reset key:ping.enabled # Reset to default
/config reload # Reload commands to Discord
/config export # Export config to YAML
/config import # Import config from YAML (attach file)Subcommands:
Displays all configuration settings organized by category.
Example Response:
📋 Configuration Settings
Commands:
ping.enabled: true
quotes.enabled: false
amikool.enabled: true
Voice Channels:
voicechannels.enabled: true
voicechannels.category.name: "Voice Channels"
...
Get the value of a specific setting.
Parameters:
key(required) - The setting key (e.g.,ping.enabled)
Example:
/config get key:voicetracking.enabled
→ voicetracking.enabled: trueUpdate a configuration value.
Parameters:
key(required) - The setting keyvalue(required) - The new value
Examples:
# Enable a feature
/config set key:ping.enabled value:true
# Set a string value
/config set key:voicechannels.lobby.name value:"🟢 Join Here"
# Set a number
/config set key:quotes.cooldown value:120
# Set comma-separated list
/config set key:voicetracking.excluded_channels value:"123,456,789"Reset a setting to its default value.
Parameters:
key(required) - The setting key to reset
Example:
/config reset key:ping.enabled
→ ✅ Reset ping.enabled to default value: falseReload all commands to Discord API. Required after enabling/disabling commands.
Example:
/config reload
→ ✅ Commands reloaded successfully!When to use:
- After enabling/disabling any command
- After changing command-related settings
- If commands don't appear in Discord
Export current configuration to a YAML file.
Example:
/config export
→ 📄 config-2026-01-15.yaml (attached file)Use Cases:
- Backup configuration
- Transfer settings between instances
- Version control settings
Import configuration from a YAML file.
Usage:
/config import (attach YAML file)Use Cases:
- Restore from backup
- Clone settings to new instance
- Bulk configuration updates
Description: Manage role-based command access control. This feature allows admins to restrict which commands can be used by specific Discord roles.
Command Name Format: Command names are used directly (e.g., quote, voicestats)
Key Features:
- Multi-role support - Assign multiple roles to a single command
- OR logic - Users need ANY of the assigned roles to execute the command
- Admin bypass - Administrators always have access to all commands
- Default open - Commands without permissions are accessible to everyone
Subcommands:
Set command permissions (replaces any existing permissions).
Note: In Discord's slash command UI,
commandandroleare option names. Selectquotefor the command option and@Moderator,@VIP, etc. for the role options. Thecommand:valuenotation in examples below represents the option structure, not literal text you type.
Usage:
/permissions set command:quote role:@Moderator
/permissions set command:quote role:@Moderator role:@VIP role:@Admin
/permissions set command:voicestats role:@MemberParameters:
command(required) - Command name (autocomplete available)role1(required) - First role that can use this commandrole2-5(optional) - Additional roles (up to 5 total)
Example Response:
✅ Set permissions for `/quote` to: @Moderator, @VIP, @Admin
Use Cases:
- Restrict powerful commands to trusted roles
- Limit access to resource-intensive commands
- Create role-specific command sets
Add roles to existing command permissions without removing current ones.
Usage:
/permissions add command:quote role:@Contributor
/permissions add command:quote role:@VIP role:@PremiumParameters:
command(required) - Command namerole1(required) - First role to addrole2-5(optional) - Additional roles to add
Example Response:
✅ Added roles to `/quote`: @Contributor
Use Cases:
- Incrementally expand access
- Grant access to new roles without reconfiguring
Remove specific roles from command permissions.
Usage:
/permissions remove command:quote role:@VIP
/permissions remove command:quote role:@Moderator role:@VIPParameters:
command(required) - Command namerole1(required) - First role to removerole2-5(optional) - Additional roles to remove
Example Response:
✅ Removed roles from `/quote`: @VIP
Note: If all roles are removed, the permission entry is deleted automatically (command becomes accessible to everyone).
Use Cases:
- Revoke access from specific roles
- Clean up outdated permissions
Remove all permissions for a command, or remove all commands from a role/user.
Usage:
# Clear permissions for a specific command
/permissions clear command:quote
# Clear all commands that have a specific role
/permissions clear role:@Moderator
# Clear all commands accessible via a user's roles
/permissions clear user:@usernameParameters:
command(optional) - Command name to clear permissions forrole(optional) - Remove this role from all commandsuser(optional) - Remove all of this user's roles from all commands
Note: You must specify at least one parameter (command, role, or user).
Example Responses:
# Clearing a command
✅ Cleared all permissions for `/quote`. It is now accessible to everyone.
# Clearing a role from all commands
✅ Removed @Moderator from 3 command(s).
# Clearing a user's roles from all commands
✅ Removed @username's roles from 5 command(s).
Use Cases:
- Reset command to default open access
- Remove all restrictions for a command
- Remove a role from all commands when role is being deleted
- Clean up permissions when removing a user's access
View the permission matrix showing all commands with role restrictions, or filter by a specific command.
Usage:
# List all command permissions
/permissions list
# View permissions for a specific command
/permissions list command:quoteParameters:
command(optional) - Filter by specific command name
Example Responses:
# Listing all permissions
Command Permissions
Commands with role restrictions:
/quote
@Moderator, @VIP
/voicestats
@Member
Commands not listed are accessible to everyone.
Admins bypass all restrictions.
# Listing a specific command
Permissions for /quote
Roles that can use this command:
@Moderator, @VIP
Admins bypass all restrictions.
# When command has no permissions
ℹ️ No permissions configured for `/quote`. It is accessible to everyone.
Use Cases:
- Audit current permissions
- Review access control setup
- Documentation and planning
- Check permissions for a specific command
Check what commands a specific user or role can access.
Usage:
/permissions view user:@username
/permissions view role:@ModeratorParameters:
user(optional) - User to checkrole(optional) - Role to check
Note: Must specify either user OR role, not both.
Example Responses:
# View user permissions
Permissions for username#1234
Can access 12 command(s):
`/ping`, `/help`, `/quote`, `/voicestats`, ...
# View role permissions
Permissions for Moderator
Can access 15 command(s):
`/ping`, `/help`, `/quote`, `/voicestats`, `/config`, ...
Use Cases:
- Troubleshoot access issues
- Verify role permissions
- User support
Important Notes:
- Always enabled - Permissions are a core feature, no configuration needed
- Admin commands - Commands like
/config,/vc,/dbtrunkautomatically require Administrator permission - Permission inheritance - Users inherit permissions from all their roles (OR logic)
- Default behavior - When no permissions are set, everyone has access (except admin-only commands)
- Cache - Permissions are cached for performance; changes take effect immediately
Examples:
# Restrict quote command to moderators and VIPs
/permissions set command:quote role:@Moderator role:@VIP
# Add contributors to the allowed list
/permissions add command:quote role:@Contributor
# Check what @user123 can access
/permissions view user:@user123
# See all permission rules
/permissions list
# Make quote accessible to everyone again
/permissions clear command:quoteDescription: Manage reaction-based roles. Allows users to self-assign roles by reacting to a message. Automatically creates Discord roles, categories, and channels with proper permissions.
Configuration:
# Enable reaction roles feature
/config set key:reactionroles.enabled value:true
# Set channel for reaction role messages
/config set key:reactionroles.message_channel_id value:"CHANNEL_ID"
# Reload commands
/config reloadPermissions: Requires Administrator permission
Subcommands:
Create a new reaction role with associated Discord role, category, and channel.
Usage:
/reactrole create name:"Gaming" emoji:🎮
/reactrole create name:"Movie Night" emoji:🎬
/reactrole create name:"Music Lovers" emoji:🎵Parameters:
name(required) - Name for the role, category, and channelemoji(required) - Emoji users will react with to get the role
What it creates:
- A Discord role with the specified name
- A category channel (visible only to role members)
- A text channel inside the category
- A reaction message in the configured message channel
Example Response:
✅ Reaction Role Created
Successfully created reaction role Gaming!
Role: @Gaming
Category: #Gaming
Channel: #gaming
Users can now react to get this role!
Use Cases:
- Create opt-in interest groups (gaming, movies, music)
- Organize by game/activity with private channels
- Event-based roles (tournament participants)
- Community segmentation
Archive a reaction role. Disables reactions but keeps the role, category, and channels.
Usage:
/reactrole archive name:"Gaming"Parameters:
name(required) - Name of the reaction role to archive
What it does:
- Marks the role as archived
- Removes the reaction message
- Keeps the Discord role intact
- Preserves the category and channels
- Users can no longer get the role via reactions
- Existing role members keep their access
Example Response:
📦 Reaction Role Archived
Successfully archived reaction role Gaming. Role and channels are preserved but reactions are disabled.
The reaction message has been removed
Use Cases:
- Temporarily disable new sign-ups
- Preserve channels for existing members
- Archive inactive communities without deletion
Unarchive a reaction role to re-enable reactions.
Usage:
/reactrole unarchive name:"Gaming"Parameters:
name(required) - Name of the reaction role to unarchive
What it does:
- Marks the role as active again
- Creates a new reaction message in the configured channel
- Users can now react to get the role again
- All existing channels and permissions remain unchanged
Example Response:
📤 Reaction Role Unarchived
Successfully unarchived reaction role Gaming. Users can now react to get this role again!
Use Cases:
- Re-enable sign-ups after a temporary pause
- Reactivate seasonal communities
- Resume role assignment after maintenance
Completely delete a reaction role and all associated resources.
Usage:
/reactrole delete name:"Gaming"Parameters:
name(required) - Name of the reaction role to delete
What it deletes:
- The Discord role
- The category and all channels inside it
- The reaction message
- The database configuration
Example Response:
🗑️ Reaction Role Deleted
Successfully deleted reaction role Gaming and all associated resources.
All resources have been permanently removed
Warning: This action is permanent and cannot be undone!
Use Cases:
- Remove obsolete reaction roles
- Clean up old communities
- Free up Discord server space
List all configured reaction roles.
Usage:
/reactrole listExample Response:
📋 Reaction Roles
Found 3 reaction role(s)
🎮 Gaming
Status: ✅ Active
Role: @Gaming
Category: #Gaming
Channel: #gaming
Created: 1/15/2026
🎬 Movie Night
Status: 📦 Archived
Role: @Movie Night
Category: #Movie Night
Channel: #movie-night
Created: 1/10/2026
Use Cases:
- View all reaction roles at a glance
- Check which roles are active vs archived
- Audit reaction role configuration
Check detailed status of a specific reaction role.
Usage:
/reactrole status name:"Gaming"Parameters:
name(required) - Name of the reaction role to check
Example Response:
🎮 Gaming
Status: ✅ Active
Role ID: 123456789
Category ID: 987654321
Channel ID: 111222333
Created: 1/15/2026, 3:30:00 PM
Last Updated: 1/15/2026, 3:30:00 PM
Message ID: 444555666
Use Cases:
- Get IDs for advanced configuration
- Debug permission issues
- Verify role configuration
Setup Guide:
- Create a dedicated channel for reaction role messages (e.g., #get-roles)
- Get the channel ID (right-click channel → Copy ID)
- Configure the bot:
/config set key:reactionroles.enabled value:true
/config set key:reactionroles.message_channel_id value:"YOUR_CHANNEL_ID"
/config reload- Create your first reaction role:
/reactrole create name:"Gaming" emoji:🎮- Users can now react in the configured channel to get roles!
How it works:
- Users react to the message with the specified emoji
- Bot automatically assigns the role
- Users gain access to the private category and channels
- Removing the reaction removes the role and access
- Category permissions are automatically maintained
Best Practices:
- Use clear, descriptive names for roles
- Choose easily recognizable emojis
- Pin the reaction message in the channel
- Organize reaction messages with category separators
- Archive roles instead of deleting to preserve data and allow reactivation
- Use unarchive to re-enable roles after maintenance or seasonal breaks
- Use archived roles for seasonal/temporary communities
Description: Voice channel management, cleanup tools, and user customization.
Configuration:
/config set key:voicechannels.enabled value:true
/config reloadSubcommands:
Clean up empty dynamically created voice channels.
Usage:
/vc reloadWhat it does:
- Removes empty user-created channels
- Keeps channels with active users
- Preserves the lobby channel
Example Response:
🧹 Cleaned up 3 empty voice channels
Use Cases:
- Manual cleanup of abandoned channels
- Server organization
- Free up channel slots
Force cleanup of ALL unmanaged channels in the voice category.
Usage:
/vc force-reloadWarning: This is destructive! It removes ALL channels except the lobby, even if they have users.
What it does:
- Removes ALL unmanaged channels in category
- Keeps only the lobby channel
- Does not remove manually created channels outside the category
Example Response:
⚠️ Force cleanup completed
Removed 8 channels from Voice Channels category
Use Cases:
- Reset voice channel setup
- Fix corrupted channel states
- Emergency cleanup
Description: When you create a voice channel, an interactive control panel is automatically sent to the channel's text chat (if available). This provides quick access to customization options.
Configuration:
/config set key:voicechannels.controlpanel.enabled value:true # Default: true
/config reloadControl Panel Buttons (Row 1):
- ✏️ Rename - Opens a modal to rename your channel
- 🔒 Make Private / 🌐 Make Public - Toggle privacy mode
- 👥 Invite - Invite users to your private channel
- 👑 Transfer - Shows how to transfer ownership
Control Panel Buttons (Row 2):
- 🔴 Go Live / ⬜ Go Offline - Mark your channel as live (streaming disclaimer)
- ⏳ Waiting Room / 🗑️ Remove Waiting Room - Toggle a companion waiting room channel
Features:
- Only visible to channel owner
- Updates dynamically when privacy mode, live status, or waiting room changes
- Persists until channel is deleted
- Posted every time a new channel is created
Requirements:
- Server must have text channels associated with voice channels (community servers)
voicechannels.controlpanel.enabledmust betrue
Example Control Panel:
🎮 Voice Channel Controls
Manage your voice channel: **Your Channel Name**
Privacy: 🌐 Public
🔴 LIVE
[✏️ Rename] [🔒 Make Private] [👥 Invite] [👑 Transfer]
[⬜ Go Offline] [🗑️ Remove Waiting Room]
Only you can see and use these controls
Available Actions:
Click the ✏️ Rename button to open a modal where you can enter a new name for your channel. No placeholder requirements - use any name you want!
Click the 🔒 Make Private button to make your channel invite-only. Only you and invited users will be able to join. Click 🌐 Make Public to allow anyone to join again.
When your channel is private, click the 👥 Invite button to see instructions on inviting users. Select a user to grant them permission to join your channel. They'll receive a DM notification.
Click the 👑 Transfer button to select a user from a dropdown menu. Only users currently in the channel will appear. Transfer ownership instantly.
Click 🔴 Go Live to mark your channel as live. This will:
- Add a
🔴prefix to your channel name (auto-removed when you go offline) - Post a disclaimer in the channel text chat about platform Terms of Service
- Notify anyone who joins the channel that it is live
Click ⬜ Go Offline to remove the live indicator.
Click ⏳ Waiting Room to create a companion waiting room channel for your voice channel. Users can join the waiting room and you (the owner) will receive a notification in the channel with a 🚪 Let In button to move them into your channel.
- Waiting room users cannot speak (mic muted)
- When deleted or when you remove it, remaining users are automatically moved into your channel
- Click 🗑️ Remove Waiting Room to delete it
- Return to default settings
- Fix misconfigured preferences
- Start fresh with new preferences
Description: Database cleanup management for voice tracking data.
Configuration:
/config set key:voicetracking.cleanup.enabled value:true
/config reloadSubcommands:
Show cleanup service status and statistics.
Usage:
/dbtrunk statusExample Response:
📊 Cleanup Service Status
Status: ✅ Running
Database: ✅ Connected
Schedule: Daily at 00:00
Last Cleanup: 2026-01-14 00:00:15
Sessions Removed: 1,247
Data Aggregated: 89 records
Retention Policy:
Detailed Sessions: 30 days
Monthly Summaries: 6 months
Yearly Summaries: 1 year
Use Cases:
- Check cleanup status
- Verify database health
- Monitor data retention
Manually trigger database cleanup now.
Usage:
/dbtrunk runWhat it does:
- Removes old detailed sessions (older than retention period)
- Removes old monthly summaries
- Removes old yearly summaries
- Preserves aggregated statistics
Example Response:
🧹 Cleanup completed successfully!
Detailed sessions removed: 1,247
Monthly summaries removed: 12
Yearly summaries removed: 1
Total space freed: 15.4 MB
Duration: 3.2 seconds
Use Cases:
- Manual cleanup between scheduled runs
- Free up database space immediately
- Test cleanup configuration
Description: Manually trigger the weekly voice channel statistics announcement.
Configuration:
/config set key:voicetracking.enabled value:true
/config set key:voicetracking.announcements.enabled value:true
/config set key:voicetracking.announcements.channel value:"voice-stats"
/config reloadUsage:
/announce-vc-statsWhat it does:
- Posts top voice channel users to configured channel
- Shows weekly statistics
- Includes medals for top 3 users
Example Response (in configured channel):
📊 Weekly Voice Channel Stats
🥇 Alice: 45h 30m
🥈 Bob: 38h 15m
🥉 Charlie: 32h 20m
4. David: 28h 10m
5. Emma: 24h 45m
...
Total server voice time: 324h 15m
Active users: 47
Use Cases:
- Post stats on-demand
- Test announcement format
- Share stats outside regular schedule
Automatic Announcements:
# Configure automatic weekly announcements
/config set key:voicetracking.announcements.schedule value:"0 16 * * 5"
# Every Friday at 4 PMDescription: Manage scheduled announcements to automatically send messages to channels on a schedule.
Configuration:
/config set key:announcements.enabled value:true
/config reloadSubcommands:
/announce create cron:"0 9 * * *" channel:#general message:"Good morning!" placeholders:trueParameters:
cron(required) - Cron schedule expression0 9 * * *- Daily at 9 AM0 12 * * 1- Every Monday at noon0 0 * * 0- Every Sunday at midnight*/30 * * * *- Every 30 minutes
channel(required) - Channel to send announcements tomessage(required) - Message contentplaceholders(optional) - Enable dynamic placeholders (default: false)embed_title(optional) - Add an embed with titleembed_description(optional) - Embed descriptionembed_color(optional) - Embed color (hex code, e.g., #FF0000)
Supported Placeholders:
When placeholders is enabled, you can use:
{server_name}- Server name{member_count}- Current member count{date}- Current date{time}- Current time{day}- Day of week (e.g., Monday){month}- Month name (e.g., January){year}- Current year
Examples:
# Daily morning announcement
/announce create cron:"0 9 * * *" channel:#general \
message:"Good morning, {server_name}! We have {member_count} members!" \
placeholders:true
# Weekly event reminder with embed
/announce create cron:"0 18 * * 5" channel:#events \
message:"Weekly game night starting soon!" \
embed_title:"🎮 Game Night" \
embed_description:"Join us for games this Friday evening!" \
embed_color:#5865F2
# Monthly server stats
/announce create cron:"0 0 1 * *" channel:#announcements \
message:"Monthly server update for {month} {year}" \
placeholders:true/announce listShows all scheduled announcements with their:
- ID
- Status (enabled/disabled)
- Channel
- Cron schedule
- Message preview
/announce delete id:123abc456defParameters:
id(required) - Announcement ID from/announce list
Example Response:
✅ Announcement Created
Announcement ID: `65f4a3b2c1d9e8f7a6b5c4d3`
Channel: #general
Schedule: `0 9 * * *`
Placeholders: Enabled
Message: Good morning, {server_name}!
Use Cases:
- Daily/weekly automated announcements
- Event reminders
- Server updates
- Community engagement messages
- Rule reminders
- Automated status updates
Description: Manage periodic polls for icebreaker discussions and community engagement. Posts Discord native polls on a schedule with questions from URL sources or database storage.
Configuration:
/config set key:polls.enabled value:true
/config set key:polls.default_duration_hours value:24 # Default poll duration
/config set key:polls.cooldown_days value:7 # Days before reusing poll
/config reloadFeatures:
- 🗳️ Native Discord Polls - Uses Discord's built-in poll feature
- 📅 Scheduled Posting - Automatic polls via cron schedules
- 📥 URL Import - Fetch poll questions from YAML/JSON files
- 🔄 Smart Rotation - Avoid repeating polls within cooldown period
- 💾 Database Storage - Store and manage poll questions locally
- 🔔 Role Pinging - Optional role mentions when posting
- 🎲 Multi-Select - Support for multiple answer selections
Subcommands:
/poll create channel:#daily-questions schedule:"0 12 * * *" duration:24 ping_role:@EveryoneParameters:
channel(required) - Channel to post polls inschedule(required) - Cron schedule expression0 12 * * *- Daily at noon0 9 * * 1- Every Monday at 9 AM0 18 * * 5- Every Friday at 6 PM
duration(optional) - Poll duration in hours (1-768, default: 24)ping_role(optional) - Role to mention when posting polls
Example:
/poll create channel:#icebreakers schedule:"0 14 * * *" duration:48 ping_role:@Community/poll import-url url:https://example.com/polls.yamlImports poll questions from a remote YAML or JSON file and saves them to the database.
Supported URL Formats:
YAML:
polls:
- question: "What's your favorite programming language?"
answers:
- "JavaScript"
- "Python"
- "Go"
- "Rust"
multiselect: false
tags: ["tech", "icebreaker"]
- question: "Would you rather fight 100 duck-sized horses or 1 horse-sized duck?"
answers:
- "100 duck-sized horses"
- "1 horse-sized duck"
- "Neither, I'm out!"
multiselect: false
tags: ["funny", "absurd"]JSON:
{
"polls": [
{
"question": "What's your favorite season?",
"answers": ["Spring", "Summer", "Fall", "Winter"],
"multiselect": false,
"tags": ["general"]
}
]
}Import Result:
📥 Import Results
Imported: 15
Skipped: 3
Errors: 0
/poll add-item question:"What's your favorite food?" \
answers:"Pizza, Tacos, Sushi, Burgers" \
multiselect:false \
tags:"food,icebreaker"Parameters:
question(required) - Poll question (max 300 characters)answers(required) - Comma-separated list of 2-10 answersmultiselect(optional) - Allow multiple selections (default: false)tags(optional) - Comma-separated tags for categorization
/poll listShows all configured poll schedules with:
- Schedule ID
- Status (enabled/disabled)
- Target channel
- Cron schedule
- Poll duration
- Ping role
- Last run time
Example Response:
📊 Poll Schedules
Total: 2 schedule(s)
✅ 65f8a9b3c2d1e4f6a7b8c5d4
Channel: #daily-questions
Schedule: `0 12 * * *`
Duration: 24h
Ping Role: @Everyone
Last Run: 2/14/2026, 12:00:00 PM
✅ 65f8b2c4d3e5f7a8b9c6d5e4
Channel: #friday-fun
Schedule: `0 18 * * 5`
Duration: 48h
Ping Role: None
Last Run: Never
/poll list-itemsShows all stored poll questions with:
- Poll ID
- Status (enabled/disabled)
- Question text (truncated)
- Number of answers
- Usage count
- Last used date
Example Response:
📊 Poll Questions
Total: 25 question(s)
✅ 65f8c3d4e5f6a7b8c9d6e5f6
Q: What's your favorite programming language?
Answers: 4
Used: 3 times
Last: 2/10/2026, 2:00:00 PM
✅ 65f8d4e5f6a7b8c9d6e5f7a8
Q: Would you rather fight 100 duck-sized horses...
Answers: 3
Used: 1 times
Last: 1/28/2026, 12:00:00 PM
/poll delete id:65f8a9b3c2d1e4f6a7b8c5d4Parameters:
id(required) - Schedule ID from/poll list
/poll delete-item id:65f8c3d4e5f6a7b8c9d6e5f6Parameters:
id(required) - Poll item ID from/poll list-items
/poll test schedule_id:65f8a9b3c2d1e4f6a7b8c5d4Posts a poll immediately from the specified schedule for testing purposes.
Parameters:
schedule_id(required) - Schedule ID to test
Poll Selection Logic:
The bot intelligently selects polls to avoid repetition:
- Cooldown Period - Polls used within the cooldown period (default 7 days) are skipped
- Usage Count - Prioritizes less-used polls
- Randomization - Randomly selects from the top 20% least-used eligible polls
- Fallback - If all polls are within cooldown, uses the oldest-used poll
Example Workflow:
# 1. Enable the feature
/config set key:polls.enabled value:true
/config reload
# 2. Import poll questions from a URL
/poll import-url url:https://mysite.com/icebreaker-polls.yaml
→ Imported: 20 polls
# 3. Or add polls manually
/poll add-item question:"Cats or dogs?" answers:"Cats, Dogs, Both!, Neither" multiselect:false
# 4. Create a schedule
/poll create channel:#daily-questions schedule:"0 12 * * *" duration:24 ping_role:@Community
# 5. Test it immediately
/poll test schedule_id:65f8a9b3c2d1e4f6a7b8c5d4
→ ✅ Test poll posted successfully
# 6. View schedules
/poll list
# 7. View all poll questions
/poll list-itemsUse Cases:
- Daily icebreaker questions to spark conversations
- Weekly "Would You Rather" discussions
- Team building and getting-to-know-you activities
- Community engagement and feedback polls
- Fun hypothetical scenarios
- Topic voting for events or discussions
Tips:
- Start Small - Import 10-15 polls initially to test the rotation
- Diversify - Mix serious and funny questions for variety
- Tag Wisely - Use tags to organize polls by theme
- Monitor Usage - Check
/poll list-itemsto see which polls are popular - Update Regularly - Add new polls monthly to keep content fresh
- Cooldown Balance - Adjust cooldown period based on pool size (more polls = longer cooldown works better)
Notes:
- Announcements persist across bot restarts
- All times use the server's timezone
- Invalid cron expressions are rejected
- Only administrators can manage announcements
Description: Interactive setup wizard to guide you through configuring KoolBot features. This is the recommended way to set up your server for the first time or configure new features.
Note: This command is always available to administrators as a core feature.
Usage:
/setup wizard # Start full setup wizard
/setup wizard feature:voicechannels # Configure specific featureSubcommands:
Start the interactive configuration wizard. Optionally specify a feature to configure directly.
Parameters:
feature(optional) - Choose a specific feature to configure:voicechannels- Dynamic voice channel managementvoicetracking- Voice activity trackingquotes- Quote systemgamification- Achievement badgeslogging- Core event logging
What it does:
The wizard provides a guided, step-by-step setup experience:
- Auto-detects existing resources - Finds existing categories, channels, and suggests using them
- Feature selection - Choose which features to enable (full wizard) or configure a specific feature
- Interactive configuration - Uses buttons, select menus, and modals to collect settings
- Validates input - Ensures channels exist and settings are valid
- Applies configuration - Automatically sets all related config keys
- Shows summary - Displays what was configured
Example Flow (Full Wizard):
Step 1: Feature Selection
┌────────────────────────────────┐
│ Select features to configure: │
│ ☑ Voice Channels │
│ ☑ Voice Tracking │
│ ☐ Quote System │
│ ☐ Achievements │
│ ☐ Core Logging │
│ │
│ [Continue] [Cancel] │
└────────────────────────────────┘
Step 2: Voice Channels Setup
┌────────────────────────────────┐
│ Voice Channels Configuration │
│ │
│ Category: Voice Channels │
│ Lobby Name: 🟢 Lobby │
│ │
│ [Next] [Back] [Cancel] │
└────────────────────────────────┘
Step 3: Confirmation
✅ Configuration Complete!
Voice Channels: Enabled
Voice Tracking: Enabled
Quote System: Disabled
Achievements: Disabled
Core Logging: Disabled
Run /config reload to apply changes.
/setup wizard feature:voicetrackingThis will:
- Skip feature selection
- Go directly to voice tracking configuration
- Configure tracking settings, excluded channels, and admin roles
- Enable the feature upon completion
- Beginner-friendly - No need to know exact config keys
- Auto-detection - Suggests existing channels and categories
- Guided workflow - Step-by-step with explanations
- Error prevention - Validates all inputs before applying
- Bulk configuration - Sets multiple related settings at once
- Interactive - Uses Discord's UI components for better UX
When to use:
- First-time setup - Easiest way to get started
- New features - Enable and configure additional features
- Troubleshooting - Reconfigure features that aren't working
- Channel changes - Update channel references after reorganization
Use Cases:
- Initial server setup
- Onboarding new administrators
- Enabling new features
- Reconfiguring after channel reorganization
- Troubleshooting misconfigured features
Notes:
- Sessions expire after 15 minutes of inactivity
- All interactions are ephemeral (only visible to you)
- Requires Administrator permission
- Changes take effect after
/config reload - Wizard validates that channels exist before applying
Description: View bot performance and usage statistics.
Usage:
/botstatsExample Response:
🤖 KoolBot Statistics
Uptime: 7 days, 14 hours, 23 minutes
Version: 1.0.0
Performance:
Memory Usage: 245 MB
CPU Usage: 3.2%
Database: Connected
Latency: 45ms
Activity:
Guilds: 1
Users Tracked: 347
Voice Sessions Today: 89
Commands Executed: 2,451
Most Used Commands:
1. /voicestats - 1,526 times
2. /ping - 421 times
3. /quote - 315 times
Use Cases:
- Monitor bot health
- Check resource usage
- View usage statistics
- Troubleshoot performance issues
| Command | Permission Level | Additional Requirements |
|---|---|---|
/ping |
Everyone | Command must be enabled |
/voicestats |
Everyone | Voice tracking enabled |
/achievements |
Everyone | Achievements enabled |
/seen |
Everyone | Voice tracking + seen enabled |
/quote |
Everyone* | Quotes enabled (*may be role-restricted) |
/amikool |
Everyone | Command enabled + role configured |
All admin commands require Administrator permission in Discord.
| Command | Additional Requirements |
|---|---|
/setup |
Administrator permission |
/config |
Administrator permission |
/permissions |
Administrator permission |
/vc |
Administrator + voice channels enabled |
/dbtrunk |
Administrator + cleanup enabled |
/announce-vc-stats |
Administrator + tracking & announcements enabled |
/botstats |
Administrator permission |
The bot needs these Discord permissions to function:
Essential:
- Read Messages/View Channels
- Send Messages
- Use Slash Commands
For Voice Features:
- Manage Channels (create/delete voice channels)
- Move Members (move users to created channels)
- View Channel (see voice channels)
- Connect (for voice state updates)
For Configuration:
- Embed Links (for rich responses)
- Attach Files (for config export/import)
/ping # Check bot status
/help [command] # Get help on commands
/voicestats top [period] [limit] # Voice leaderboards
/voicestats user [user] [period] # Voice channel stats
/achievements [user] # View earned badges
/seen user:@User # Last seen info
/quote text:"..." author:"@User" # Add quote to channel
/amikool # Role verification# Initial Setup (Recommended)
/setup wizard # Interactive setup wizard
/setup wizard feature:... # Configure specific feature
# Configuration
/config list # List all settings
/config get key:... # Get setting value
/config set key:... value:... # Set setting value
/config reset key:... # Reset to default
/config reload # Reload commands
/config export # Export config
/config import # Import config
# Permissions
/permissions set command:... role:... # Set command permissions
/permissions add command:... role:... # Add role to command
/permissions remove command:... role:...# Remove role from command
/permissions list # View all permissions
/permissions list command:... # View permissions for a command
/permissions view user:... # Check user access
/permissions view role:... # Check role access
/permissions clear command:... # Clear command restrictions
/permissions clear role:... # Remove role from all commands
/permissions clear user:... # Remove user's roles from all commands
# Voice Management
/vc reload # Clean empty channels
/vc force-reload # Force cleanup all
# Database Management
/dbtrunk status # Cleanup status
/dbtrunk run # Run cleanup now
# Other Admin
/announce-vc-stats # Post stats now
/announce create # Schedule announcement
/announce list # View announcements
/announce delete # Remove announcement
/reactrole create # Create reaction role
/reactrole list # View reaction roles
/reactrole archive # Archive reaction role
/reactrole unarchive # Unarchive reaction role
/reactrole delete # Delete reaction role
/reactrole status # Check role status
/botstats # Bot statistics# Use the interactive setup wizard for guided configuration
/setup wizard
# Or configure specific features
/setup wizard feature:voicechannels
/setup wizard feature:voicetrackingThe wizard will:
- Auto-detect existing channels
- Guide you through each feature
- Validate all settings
- Apply configuration automatically
# 1. Enable basic commands
/config set key:ping.enabled value:true
/config reload
# 2. Setup voice channels (use wizard)
/setup wizard feature:voicechannels
/config reload
# 3. Enable tracking
/config set key:voicetracking.enabled value:true
/config set key:voicetracking.seen.enabled value:true
/config reload
# 4. Enable weekly announcements
/config set key:voicetracking.announcements.enabled value:true
/config set key:voicetracking.announcements.channel value:"voice-stats"
/config reload
# 5. Enable achievements system
/config set key:achievements.enabled value:true
/config reload
# 6. Setup data cleanup
/config set key:voicetracking.cleanup.enabled value:true
/config reload
# 7. Setup quote channel (optional)
/config set key:quotes.enabled value:true
/config set key:quotes.channel_id value:"YOUR_QUOTE_CHANNEL_ID"
/config reload# 1. Create a dedicated text channel in Discord (e.g., #quotes)
# 2. Right-click the channel → Copy ID
# 3. Configure the bot:
/config set key:quotes.enabled value:true
/config set key:quotes.channel_id value:"YOUR_CHANNEL_ID"
/config reload
# 4. Test it
/quote text:"Hello World!" author:"@YourName"# Create channels in Discord first, then:
/config set key:core.startup.enabled value:true
/config set key:core.startup.channel_id value:YOUR_CHANNEL_ID
/config set key:core.errors.enabled value:true
/config set key:core.errors.channel_id value:YOUR_CHANNEL_ID
/config set key:core.cleanup.enabled value:true
/config set key:core.cleanup.channel_id value:YOUR_CHANNEL_ID# 1. Check if command is enabled
/config get key:ping.enabled
# 2. Enable if needed
/config set key:ping.enabled value:true
# 3. MUST reload commands
/config reload
# 4. Wait a few minutes for Discord to sync# Backup
/config export
# Save the file somewhere safe
# Restore
/config import
# Attach the saved YAML fileSolutions:
- Check if enabled:
/config get key:commandname.enabled - Enable it:
/config set key:commandname.enabled value:true - Reload commands:
/config reload(Required!) - Wait 2-5 minutes for Discord to sync
Check:
- Do you have Administrator permission?
- Is the bot role high enough in the hierarchy?
- Is the feature enabled in configuration?
Verify:
/config get key:voicechannels.enabled
/config get key:voicetracking.enabledBoth should be true. If not:
/config set key:voicechannels.enabled value:true
/config set key:voicetracking.enabled value:true
/config reloadPossible causes:
- Tracking recently enabled (give it time)
- Channels are excluded
- Users not in voice channels yet
Check excluded channels:
/config get key:voicetracking.excluded_channels- README.md - Bot overview and quick start
- SETTINGS.md - Complete configuration reference
- TROUBLESHOOTING.md - Detailed troubleshooting guide
Need help? Check the troubleshooting guide or open an issue