A powerful, modern Discord bot for creating beautiful embeds with an intuitive interface
Features β’ Installation β’ Usage β’ Commands β’ Architecture β’ Documentation
EmbedBot is a sophisticated Discord bot that makes creating and managing rich Discord embeds effortless. Whether you're building announcement channels, documentation, server info displays, or any other rich content, EmbedBot provides a professional, user-friendly interface directly within Discord.
Unlike simple embed generators, EmbedBot offers:
- In-Discord editing: Build embeds using Discord's modern Components V2 interface
- Multi-embed sessions: Create and manage multiple embeds simultaneously
- Live preview: See your embeds update in real-time as you edit
- Persistent configuration: All settings auto-save and survive restarts
- Webhook integration: Publish to multiple destinations with labeled webhooks
- Optional GUI: Beautiful JavaFX interface for desktop management
- Full Customization: Title, description, color, author, footer, timestamp, fields, images
- Components V2 Interface: Modern Discord UI with containers, sections, separators, and rich text
- Multi-Embed Sessions: Work on up to 10 embeds at once with easy navigation
- Live Preview: Real-time embed preview updates as you edit
- Smart Defaults: Sensible starting values for quick embed creation
- Copy Function: Clone existing embeds from messages or URLs
- Field Management: Add, edit, remove, and organize embed fields
- Modal-Based Editing: Clean, focused editing experience for each property
- Material Design Theme: Catppuccin Mocha dark theme with professional aesthetics
- Token Management: Secure password-masked token input
- Real-Time Logs: Live console output viewer with auto-scroll
- Lifecycle Controls: Start/stop bot with one click
- Status Indicators: Visual feedback for bot state
- Cross-Platform: Works on Linux, Windows, and macOS
- Multi-Webhook Support: Configure multiple webhook targets per server
- Label-Based Management: Easy-to-remember webhook labels
- Flexible Publishing: Send to channels or webhooks
- Automatic Saving: Webhook configurations persist across restarts
- Channel Controls: Dedicated builder and publish channels per guild
- Session-Based: Each user gets their own editing session with 30-minute TTL
- Thread-Safe: Concurrent collections for multi-user safety
- Component Namespacing: Clean
eb:v2:prefix prevents ID conflicts - Automatic Persistence: Config auto-saves to JSON
- JDA 6.3.0: Latest Discord API with full gateway intent support
- Java 17+: Modern Java with records, pattern matching, and sealed classes
| Requirement | Version | Notes |
|---|---|---|
| Java | 17+ | Download OpenJDK |
| Discord Bot | N/A | Create bot |
| Permissions | Required | Send Messages, Embed Links, Use Slash Commands |
| Intents | Required | GUILD_MEMBERS, GUILD_MESSAGES |
- Download the latest
embedbot-1.1-SNAPSHOT.jarfrom releases - Verify Java version:
java -version # Should show version 17 or higher - Run the bot:
java -jar embedbot-1.1-SNAPSHOT.jar
# Clone the repository
git clone https://github.com/yourusername/EmbedBot.git
cd EmbedBot
# Build with Maven
mvn clean package
# Run the compiled JAR
java -jar target/embedbot-1.1-SNAPSHOT.jarBest for: Desktop users, development, visual feedback
java -jar embedbot-1.1-SNAPSHOT.jarGUI Features:
- Token Input: Paste your Discord bot token (masked for security)
- Start/Stop: Control bot lifecycle with buttons
- Console: View real-time logs with color-coded messages
- Status Bar: See connection status at a glance
Best for: Linux servers, Docker containers, automation
# Option 1: Environment variable
export DISCORD_TOKEN="your_bot_token_here"
java -jar embedbot-1.1-SNAPSHOT.jar --no-gui
# Option 2: .env file (recommended)
echo "DISCORD_TOKEN=your_bot_token_here" > .env
java -jar embedbot-1.1-SNAPSHOT.jar --headless
# Option 3: Docker-friendly
docker run -e DISCORD_TOKEN="token" embedbot --no-guiFor testing: Commands update instantly instead of waiting up to 1 hour
export GUILD_ID="your_server_id"
export DISCORD_TOKEN="your_token"
java -jar embedbot-1.1-SNAPSHOT.jar| Command | Description | Example |
|---|---|---|
/embed new |
Start a new embed editing session | /embed new |
/embed edit |
Resume your active session | /embed edit |
/embed cancel |
Cancel and delete your session | /embed cancel |
/embed publish |
Send embeds to publish channel or webhook | /embed publish |
/embed help |
Show comprehensive help message | /embed help |
| Command | Description | Example |
|---|---|---|
/embed copy [message_id] |
Clone an embed from a message | /embed copy 123456789 |
/embed copy [url] |
Clone an embed from a message URL | /embed copy https://discord.com/... |
/embed set-builder-channel [channel] |
Set where embed UI appears | /embed set-builder-channel #embeds |
/embed set-publish-channel [channel] |
Set default publish destination | /embed set-publish-channel #announcements |
| Command | Description | Example |
|---|---|---|
/embed webhook-add [label] [url] |
Add a named webhook target | /embed webhook-add updates https://... |
/embed webhook-remove [label] |
Remove a webhook by label | /embed webhook-remove updates |
/embed webhook-list |
List all configured webhooks | /embed webhook-list |
When you run /embed new or /embed edit, you'll see a modern two-message interface:
ββββββββββββββββββββββββββββββ
## π¨ Embed Builder (Embed 1/3)
ββββββββββββββββββββββββββββββ
π Mode Selector
βββββββββββββββββββββββββββ
β βοΈ Main π Fields β
β π Reorder βοΈ Misc β
βββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββ
βοΈ Main Editing
Edit title, description, color, and images
[π Title/URL] [π Description]
[π¨ Color] [πΌοΈ Images]
[π€ Author] [π Footer]
[β±οΈ Timestamp]
ββββββββββββββββββββββββββββββ
Navigation
[β¬
οΈ Prev] [β‘οΈ Next] [β
Done]
Shows your embed updating in real-time as you edit. Supports all Discord embed features including custom colors, images, fields, timestamps, and more.
Purpose: Edit core embed properties
Actions:
- π Title/URL: Set title text and optional hyperlink
- π Description: Set main embed description (supports Markdown)
- π¨ Color: Set embed accent color (hex format:
#FF5733) - πΌοΈ Images: Set thumbnail (small image) and main image (large)
- π€ Author: Set author section (name, URL, icon)
- π Footer: Set footer section (text, icon)
- β±οΈ Timestamp: Toggle current timestamp on/off
Purpose: Manage embed fields
Planned Actions:
- Add new fields (name/value pairs)
- Edit existing fields
- Remove fields
- Reorder fields
- Toggle inline layout
Purpose: Manage multiple embeds in session
Actions:
- β Add Embed: Create a new blank embed (max 10)
- ποΈ Delete: Remove current embed from session
- β¬ οΈ Move Left: Move embed earlier in sequence
- β‘οΈ Move Right: Move embed later in sequence
- Smart Buttons: Disabled when at boundaries (first/last)
Purpose: Additional options and settings
Actions:
- π€ Export: Copy embed as JSON
- π₯ Import: Load embed from JSON
- π Reset: Clear current embed
- π Duplicate: Clone current embed
All text inputs use Discord modals for a clean editing experience:
βββββββββββββββββββββββββββββββββββ
β Edit Embed Title β
βββββββββββββββββββββββββββββββββββ€
β β
β Title Text β
β βββββββββββββββββββββββββββ β
β β My Awesome Embed β β
β βββββββββββββββββββββββββββ β
β β
β URL (optional) β
β βββββββββββββββββββββββββββ β
β β https://example.com β β
β βββββββββββββββββββββββββββ β
β β
β [Cancel] [Submit] β
βββββββββββββββββββββββββββββββββββ
All settings are automatically saved and persist across bot restarts.
# Required: Your Discord bot token
DISCORD_TOKEN=your_bot_token_here
# Optional: Server ID for instant command updates (dev only)
GUILD_ID=1234567890Auto-generated JSON file storing per-server configuration:
{
"1234567890": {
"builderChannel": 9876543210,
"publishChannel": 1111222233,
"webhooks": [
{
"label": "updates",
"url": "https://discord.com/api/webhooks/..."
},
{
"label": "announcements",
"url": "https://discord.com/api/webhooks/..."
}
]
}
}What's Saved:
- β Builder channels (where embed UI appears)
- β Publish channels (default destination)
- β Webhook targets (labeled URLs)
- β Per-guild settings isolated by server ID
When It Saves:
- Immediately after
/embed set-builder-channel - Immediately after
/embed set-publish-channel - Immediately after
/embed webhook-addor/embed webhook-remove
- Go to Discord Developer Portal: https://discord.com/developers/applications
- Create New Application: Click "New Application", give it a name
- Create Bot User: Navigate to "Bot" tab, click "Add Bot"
- Get Token: Click "Reset Token", copy the token (save securely!)
- Enable Intents:
- Enable
SERVER MEMBERS INTENT - Enable
MESSAGE CONTENT INTENT
- Enable
- Invite Bot: Use OAuth2 URL Generator with scopes:
botapplications.commands- Permissions: Send Messages, Embed Links, Use Slash Commands
src/main/java/io/github/tootertutor/embedbot/
βββ Bot.java # JDA bootstrap, lifecycle management
βββ Launcher.java # Entry point (GUI/CLI routing)
βββ EmbedController.java # Discord event dispatcher
βββ Util.java # Helper methods
βββ api/
β βββ WebhookClient.java # HTTP webhook posting
βββ config/
β βββ ConfigPersistence.java # JSON save/load
β βββ GuildConfig.java # Per-guild settings store
β βββ model/
β βββ WebhookTarget.java # Webhook data model
βββ gui/
β βββ BotGUI.java # JavaFX desktop interface
βββ interaction/
β βββ EmbedInteractionHandler.java # Component V2 event router
βββ model/
β βββ EmbedDraft.java # Mutable embed builder wrapper
β βββ MenuMode.java # UI mode enum (MAIN, FIELDS, etc.)
βββ session/
β βββ EditingSession.java # User session state
β βββ SessionStore.java # Thread-safe session manager
βββ ui/
β βββ EmbedUiService.java # Component V2 UI renderer
βββ util/
βββ EmbedMapper.java # Embed conversion utilities
- Each user gets isolated
EditingSessionwith 30-minute TTL - Automatic cleanup of expired sessions
- Thread-safe
ConcurrentHashMapfor multi-user support - Session stores: drafts, selected index, mode, message IDs
- All component IDs prefixed with
eb:v2: - Format:
eb:v2:action:param1:param2 - Examples:
eb:v2:mode:main,eb:v2:title,eb:v2:nav:prev - Prevents conflicts with other bots
- Control Message: Interactive buttons, selects, navigation
- Preview Message: Live embed preview, updates automatically
- Reduces clutter, improves UX
- Labels wrap
TextInputfor better UX - Multi-field modals for related properties (e.g., title + URL)
- Validation before submission
- Clear error messages
- Immediate save on config change
- Atomic writes with Gson
- No manual save commands needed
- Graceful degradation on file errors
- Bootstraps JDA with gateway intents
- Registers slash commands (global or guild-specific)
- Manages bot lifecycle (start/stop)
- Resolves token from environment/properties/.env
- Thread-safe session storage with
ConcurrentHashMap - Automatic expiration after TTL (30 minutes)
- Cleanup thread for memory management
- Per-user session isolation
- Renders Components V2 layouts
- Generates mode-specific button rows
- Creates containers, sections, separators
- Handles emoji, colors, formatting
- Routes slash commands, buttons, selects, modals
- Validates user permissions
- Updates sessions and UI
- Handles publish logic
- Loads/saves
embedbot-config.json - Atomic file writes
- Error handling and logging
- Gson serialization
The JavaFX GUI uses the Catppuccin Mocha color palette for a modern, soothing aesthetic:
| Element | Color | Hex |
|---|---|---|
| Background | Base | #1e1e2e |
| Surface | Surface0 | #313244 |
| Text | Text | #cdd6f4 |
| Primary | Blue | #89b4fa |
| Success | Green | #a6e3a1 |
| Error | Red | #f38ba8 |
| Warning | Yellow | #f9e2af |
Styles are defined in src/main/resources/styles.css with CSS classes for reusable theming.
- COMPONENTS_V2.md: Deep dive into Discord Components V2 implementation
- DiscordComponents.md: Legacy component reference
# Clean build
mvn clean package
# Skip tests (faster)
mvn clean package -DskipTests
# With dependencies (shaded JAR)
mvn clean package shade:shademvn testIntelliJ IDEA:
- File β Open β Select
pom.xml - Trust project, wait for Maven import
- Run β Edit Configurations β Add Application
- Main class:
io.github.tootertutor.embedbot.Launcher
Eclipse:
- File β Import β Maven β Existing Maven Projects
- Select project directory
- Run As β Java Application β Select
Launcher
VS Code:
- Open folder in VS Code
- Install "Extension Pack for Java"
- F5 to run/debug
| Dependency | Version | Purpose |
|---|---|---|
| JDA | 6.3.0 | Discord API wrapper |
| JavaFX | 21.0.1 | GUI framework |
| Logback | 1.5.6 | Logging |
| Gson | 2.10.1 | JSON serialization |
| java-dotenv | 5.2.2 | .env file parsing |
Problem: Missing dependencies
Solution: Use the shaded JAR from target/embedbot-1.1-SNAPSHOT.jar which includes all dependencies
Problem: JavaFX not found Solution:
- Ensure Java 17+ is installed
- JavaFX is bundled in the shaded JAR
- Try headless mode:
java -jar embedbot.jar --no-gui
Problem: Commands not registered or permissions missing Solutions:
- Check bot has these permissions: Send Messages, Embed Links, Use Slash Commands
- Set
GUILD_IDfor instant updates (dev only) - Wait up to 1 hour for global command propagation
- Check console logs for errors
- Verify intents are enabled in Developer Portal
Problem: Invalid or missing token Solutions:
- Ensure token has no extra spaces or quotes
- Use Bot token, not User token
- Check token is set in
.envor environment - Verify token in Discord Developer Portal
Problem: Double-acknowledgment bug (fixed in latest version)
Solution: Update to latest version where event.editComponents() is used
Problem: Sessions expire after 30 minutes of inactivity
Solution: Start a new session with /embed new or /embed edit
Enable verbose logging:
# Set log level to DEBUG
export LOG_LEVEL=DEBUG
java -jar embedbot-1.1-SNAPSHOT.jarCheck logs/ directory for detailed logs.
This project is provided as-is for educational and personal use.
Feel free to:
- β Use for personal Discord servers
- β Learn from the code
- β Fork and modify for your needs
Please:
- β Don't sell or redistribute commercially
- β Don't claim as your own work
- β Don't use for malicious purposes
Built with love using these amazing libraries:
- JDA - Powerful Java wrapper for Discord API
- JavaFX - Modern, rich GUI framework
- Catppuccin - Soothing pastel theme
- java-dotenv - Environment variable management
- Gson - JSON serialization library
- Logback - Reliable logging framework
Special thanks to:
- Discord API team for Components V2
- JDA maintainers for excellent documentation
- Catppuccin theme creators for the beautiful color palette
Made with πͺ and π₯ by TooterTutor
Report Bug β’ Request Feature β’ Documentation