Bot Mother DC
Complete Documentation
Version 1.0.0
Table of Contents
- Installation & Setup
- Discord Bot Configuration
- Account Synchronization
- Ticket Support System
- VoIP Voice Channels
- Shop & Stripe Integration
- Chat Bridge System
- Content Moderation
- Staff Roles
- Commands Reference
- Permissions Reference
- Configuration Files
- Troubleshooting
1. Installation & Setup
Requirements
- Minecraft Server: Spigot/Paper 1.17.x - 1.21.x
- Java: Version 17 or higher
- Discord Bot: Created via Discord Developer Portal
- Stripe Account: (Optional) For payment processing
Installation Steps
- Download BotMotherDC.jar
- Place the JAR file in your server's plugins folder
- Start the server once to generate configuration files
- Stop the server
- Configure the config.yml with your Discord bot token and guild ID
- Start the server again
First Time Setup
On first startup with
first-time-setup: true in config.yml, the plugin will automatically create:
- Discord roles: DevOps, Administrator, Moderator, Player, Member, Unverified
- Channel categories: Welcome, Chat, VoIP, Support, Staff
- Channels: Welcome, Rules, Announcements, Global Chat, Media Chat, Server Chat
- Support system: Ticket creation channel
WARNING: Set
first-time-setup: false after initial setup to prevent accidental resets!
2. Discord Bot Configuration
Creating a Discord Bot
- Go to https://discord.com/developers/applications
- Click "New Application" and give it a name
- Go to the "Bot" section
- Click "Add Bot"
- Enable these Privileged Gateway Intents:
- PRESENCE INTENT
- SERVER MEMBERS INTENT
- MESSAGE CONTENT INTENT
- Copy the bot token
- Go to OAuth2 > URL Generator
- Select scopes: bot, applications.commands
- Select bot permissions: Administrator (or specific permissions)
- Copy the generated URL and invite the bot to your server
config.yml Configuration
Code (Text):
discord:
bot-token: "YOUR_BOT_TOKEN_HERE"
guild-id: "YOUR_GUILD_ID_HERE"
plugin:
server-name: "My Minecraft Server"
language: "en"
debug-mode: false
first-time-setup: true # Set to false after first run!
3. Account Synchronization
How Sync Works
- Player types /sync dc in Minecraft
- Plugin generates a 6-character code (e.g., ABC123)
- Player enters the code in Discord verification channel
- Accounts are linked, rewards are granted
Sync Rewards Configuration
Edit
positions.yml to configure sync rewards:
Code (Text):
sync-rewards:
enabled: true
# Permissions granted on sync
permissions:
- "botmotherdc.synced"
- "botmotherdc.chat.discord"
# Commands executed when player syncs
# Placeholders: {player}, {uuid}, {discord_id}, {discord_tag}
commands-on-sync:
- "broadcast &a{player} &7has linked their Discord account!"
- "give {player} diamond 3"
- "eco give {player} 1000"
# Discord role to assign
discord-role-id: "123456789012345678"
# Grant a position on sync
grant-position:
position-id: "subscriber"
duration-days: 7 # -1 for permanent
# Commands on unsync
commands-on-unsync:
- "broadcast &c{player} &7has unlinked their Discord account."
# Role to remove on unsync
discord-role-remove-on-unsync: "123456789012345678"
4. Ticket Support System
How Tickets Work
- User clicks "Create Ticket" button in #support channel
- User fills modal with subject and description
- Private ticket channel is created
- Staff receive DM notification with "Accept" button
- Staff accepts ticket, channel permissions update
- Optional: Create voice channel for call
- Staff closes ticket when resolved
Ticket Configuration
Code (Text):
# In config.yml
ticket:
timeout-minutes: 30 # Auto-close if no staff responds
cancel-wait-minutes: 5 # Wait time before user can cancel
notify-staff-dm: true # Send DM to staff on new tickets
Ticket Features
- Private Channels: Only ticket creator and assigned staff can see
- Staff Cannot Send Until Accept: Staff must click Accept button first
- Voice Support: Create voice channel for live support
- Auto-Timeout: Tickets auto-close after configured timeout
- Extended Timeout: 24-hour timeout when no staff is online
- History Logging: All tickets saved to data/tickets.yml
5. VoIP Voice Channels
How VoIP Works
- User joins the "Create VoIP" channel
- A new voice channel is created for them
- User is moved to their new channel
- Channel auto-deletes when empty
VoIP Configuration
Code (Text):
# In config.yml
voip:
max-users: 6 # Max users per voice channel
empty-timeout-seconds: 0 # Delete immediately when empty (0 = instant)
alone-timeout-minutes: 5 # Delete after 5 min with only 1 person
screen-share-required-hours: 12 # Voice hours needed for screen share
Voice Time Tracking
The plugin tracks voice time for each user. After reaching the configured hours, users unlock screen sharing permission.
6. Shop & Stripe Integration
Setting Up Stripe
- Create account at https://stripe.com
- Get API keys from Dashboard > Developers > API keys
- Configure stripe.yml with your keys
- Start the server to generate webhook URL
- Create webhook in Stripe Dashboard using the generated URL
- Copy the webhook signing secret to stripe.yml
- Restart server to enable shop
stripe.yml Configuration
Code (Text):
stripe:
secret-key: "sk_test_YOUR_SECRET_KEY"
publishable-key: "pk_test_YOUR_PUBLISHABLE_KEY"
webhook-secret: "whsec_YOUR_WEBHOOK_SECRET"
payment:
currency: "usd"
allow-promo-codes: true
webhook-server:
enabled: true
port: 8443
# Cloudflare Tunnel (recommended for production)
cloudflare-tunnel:
enabled: false
url: "https://your-tunnel.trycloudflare.com"
delivery:
mode: "both" # online, login, or both
announce-purchases: true
announcement-format: "&6&l[SHOP] &e{player} &7just purchased &a{position}!"
polling:
enabled: true
interval-seconds: 30
IMPORTANT SSL WARNING:
The auto-generated SSL certificate is for TESTING ONLY!
For production, use Cloudflare Tunnel (free) or a valid SSL certificate.
Stripe will reject self-signed certificates in live mode!
Creating Positions/VIPs
Edit
positions.yml:
Code (Text):
positions:
vip:
enabled: true
display-name: "VIP"
description: |
VIP Benefits:
- Custom prefix
- Exclusive commands
- Priority queue
price: 9.99
duration-days: 30 # -1 for permanent
icon: "DIAMOND"
color: "&b"
priority: 20 # Higher = appears first in shop
permissions:
- "server.vip"
- "essentials.fly"
commands-on-activate:
- "broadcast &b{player} &7is now &b&lVIP&7!"
- "give {player} diamond 10"
commands-on-expire:
- "broadcast &b{player}&7's VIP has expired."
discord-role-id: "123456789012345678"
Webhook Events Required
When creating webhook in Stripe Dashboard, select:
- checkout.session.completed
- checkout.session.expired
- payment_intent.succeeded
- payment_intent.payment_failed
7. Chat Bridge System
Chat Channels
- Global Chat: Minecraft <-> Discord, all players
- Media Chat: Discord only, for images/videos
- Server Chat: Minecraft <-> Discord, verified players only
Chat Configuration
Code (Text):
# In config.yml
channels:
global-chat:
allow-media: false
delay-seconds: 10 # Anti-spam delay
media-chat:
delay-seconds: 300 # 5 minute delay
server-chat:
verified-only: true # Only synced players
delay-seconds: 0
Chat Filters (chat.yml)
For servers using chat plugins (TownyChat, EssentialsChat):
Code (Text):
chat-filter:
# Messages with these prefixes go to Discord
global-prefixes:
- "[G]"
- "[Global]"
# Messages with these prefixes are NOT sent to Discord
local-prefixes:
- "[L]"
- "[Local]"
- "[Party]"
- "[Town]"
# Messages completely blocked
blocked-prefixes:
- "/"
- "[System]"
- "[PM]"
8. Content Moderation
Moderation Features
- Profanity filter with multi-language support
- Leetspeak detection (f*ck, sh1t, etc.)
- Repeated character detection (fuuuuck)
- Spaced word detection (f u c k)
- Link filtering with whitelist
- Cross-platform punishment sync
norms.yml Configuration
Code (Text):
general:
enabled: true
sync-punishments: true # Sync punishments between platforms
links:
enabled: true
whitelist:
- "discord.gg"
- "minecraft.net"
profanity:
enabled: true
check-leetspeak: true
check-repeated-chars: true
check-spaced-words: true
words-en:
- "badword1"
- "badword2"
words-pt_br:
- "palavrao1"
punishments:
warnings:
max-before-mute: 3
expiration-hours: 24
delete-message: true
mute:
duration-hours: 24
max-before-kick: 5
kick:
duration-hours: 24
max-before-ban: 3
ban:
first-ban-days: 7
max-before-permanent: 5
9. Staff Roles
How Staff Roles Work
- Staff member links Discord to Minecraft via /sync
- Staff has Administrator or Moderator role in Discord
- When they join Minecraft, plugin detects Discord role
- Prefix and permissions are automatically applied
Staff Configuration (positions.yml)
Code (Text):
staff-roles:
enabled: true
administrator:
discord-role-id: "123456789012345678"
chat-prefix: "&c&l[ADMIN] &r"
nickname-prefix: "&c[A] "
permissions:
- "botmotherdc.staff.admin"
- "minecraft.command.gamemode"
commands-on-grant:
- "broadcast &c{player} &7is now an &c&lAdministrator&7!"
commands-on-revoke:
- "broadcast &c{player} &7is no longer an Administrator."
moderator:
discord-role-id: "123456789012345678"
chat-prefix: "&9&l[MOD] &r"
nickname-prefix: "&9[M] "
permissions:
- "botmotherdc.staff.moderator"
commands-on-grant:
- "broadcast &9{player} &7is now a &9&lModerator&7!"
10. Commands Reference
Player Commands
Code (Text):
/sync dc
Description: Generate a code to link your Minecraft account to Discord
Permission: botmotherdc.sync (default: true)
Aliases: /linkar, /vincular, /discord
/positions
Description: View your active positions/VIPs
Permission: botmotherdc.positions (default: true)
Aliases: /vip, /ranks, /cargos
Admin Commands
Code (Text):
/botmother reload
Description: Reload all configuration files
Permission: botmotherdc.admin.reload (OP)
/botmother reset
Description: Reset Discord server setup (recreate roles/channels)
Permission: botmotherdc.admin.reset (OP)
/positions list
Description: List all available positions
Permission: botmother.admin.positions (OP)
/positions give <player> <position> <days>
Description: Grant a position to a player
Permission: botmother.admin.positions (OP)
Example: /positions give Steve vip 30
/positions remove <player> <position>
Description: Remove a position from a player
Permission: botmother.admin.positions (OP)
Example: /positions remove Steve vip
/positions check <player>
Description: Check a player's active positions
Permission: botmother.admin.positions (OP)
Example: /positions check Steve
11. Permissions Reference
Code (Text):
# Wildcard Permissions
botmotherdc.* - All permissions
botmotherdc.admin.* - All admin permissions
botmotherdc.user.* - All user permissions
# Admin Permissions (default: OP)
botmotherdc.admin.reload - Reload configuration
botmotherdc.admin.reset - Reset Discord setup
botmother.admin.positions - Manage player positions
# User Permissions (default: true)
botmotherdc.sync - Use the sync command
botmotherdc.positions - View own positions
# Special Permissions
botmotherdc.synced - Granted after sync
botmotherdc.chat.discord - Use Discord chat features
botmotherdc.chat.color - Use color codes in chat
botmother.links.bypass - Bypass link filter
12. Configuration Files
File Structure
Code (Text):
plugins/BotMotherDC/
├── configs/
│ ├── config.yml # Main plugin configuration
│ ├── stripe.yml # Stripe payment settings
│ ├── positions.yml # VIP/ranks and staff roles
│ ├── chat.yml # Chat filter settings
│ └── norms.yml # Moderation rules
├── languages/
│ ├── en.yml # English
│ ├── pt_br.yml # Portuguese (Brazil)
│ ├── es.yml # Spanish
│ ├── it.yml # Italian
│ ├── ru.yml # Russian
│ └── zh.yml # Chinese
├── data/
│ ├── linked_accounts.yml # Synced accounts
│ ├── shop_data.yml # Position purchases
│ ├── voice_time.yml # Voice time tracking
│ ├── tickets.yml # Ticket history
│ └── moderation_data.yml # Punishment records
└── ssl/
└── keystore.jks # Auto-generated SSL certificate
13. Troubleshooting
Bot Not Connecting
- Check bot token is correct in config.yml
- Ensure bot has Administrator permission in Discord
- Verify all Gateway Intents are enabled in Developer Portal
- Check console for error messages
Stripe Webhook Errors
- "TLS certificate verify failed": Use Cloudflare Tunnel or valid SSL
- "Timed out connecting": Open port 8443 in firewall
- "Invalid signature": Verify webhook-secret is correct
- Check Stripe Dashboard > Webhooks for error details
Positions Not Working
- Ensure Stripe is fully configured
- Check webhook-secret is set (not placeholder)
- Verify position exists in positions.yml
- Enable debug-mode in config.yml for detailed logs
Sync Rewards Not Given
- Check sync-rewards.enabled is true
- Verify commands syntax in positions.yml
- Test commands manually in console
- Enable debug-mode for detailed logging
Debug Mode
Enable debug mode for detailed logging:
Code (Text):
# In config.yml
plugin:
debug-mode: true
Bot Mother DC Documentation v1.0.0