Configuration
This page documents every section of config.yml and its corresponding environment variable overrides.
Setup
-
Copy the template:
cp config.example.yml config.yml -
Edit
config.ymlwith your values. Sensitive values like tokens should use environment variable interpolation:bot: TOKEN: ${TOKEN} -
Create a
.envfile for secrets:TOKEN=your_discord_bot_token_here
Values in .env override the corresponding ${VAR} placeholders in config.yml.
bot Section
bot:
TOKEN: ${TOKEN} # Bot token (use .env override)
EMBED_COLOR_MAIN: "#F4E0C7" # Primary embed color (hex)
EMBED_COLOR_SECOND: "#2F3136" # Secondary embed color
OWNER_ID: "YOUR_DISCORD_USER_ID" # Bot owner's Discord user ID
ADMIN: ["YOUR_DISCORD_USER_ID"] # Admin user IDs (array)
DEFAULT_VOLUME: 80 # Default playback volume (1-100)
LANGUAGE: "en" # Default language code
DEBUG_MODE: false # Enable verbose logging
SHARDING_SYSTEM:
shardsPerClusters: 1 # Shards per cluster
totalClusters: 1 # Total clusters
BOT_ACTIVITY1: "your heart" # Status rotation text 1
BOT_ACTIVITY2: "your dream" # Status rotation text 2
BOT_ACTIVITY3: "your life" # Status rotation text 3
BOT_ACTIVITY_TYPE: 2 # 0=Playing, 1=Streaming, 2=Listening, 3=Watching, 4=Custom, 5=Competing
BOT_STATUS: "idle" # online, idle, dnd, invisible| Key | Type | Default | Description |
|---|---|---|---|
TOKEN | string | - | Discord bot token. Use ${TOKEN} and set in .env |
EMBED_COLOR_MAIN | string | #F4E0C7 | Primary hex color for embeds |
EMBED_COLOR_SECOND | string | #2F3136 | Secondary hex color for embeds |
OWNER_ID | string | - | Discord user ID of the bot owner. Always bypasses all access checks |
ADMIN | string[] | [] | Discord user IDs with admin privileges. Bypass all access checks |
DEFAULT_VOLUME | number | 80 | Default playback volume (1-100) |
LANGUAGE | string | en | Default language code. See available codes below |
DEBUG_MODE | boolean | false | Enables debug-level logging |
SHARDING_SYSTEM.shardsPerClusters | number | 1 | Shards per cluster |
SHARDING_SYSTEM.totalClusters | number | 1 | Total clusters to spawn |
BOT_ACTIVITY1/2/3 | string | - | Rotating status text |
BOT_ACTIVITY_TYPE | number | 2 | Discord activity type |
BOT_STATUS | string | idle | Discord status |
Available Languages
ar, cs, de, en, es, fr, he, hi, id, it, ja, ko, nl, pl, pt, ru, th, tr, uk, vi, zh-CN, zh-TW
lavalink Section
lavalink:
SPOTIFY:
enable: true
id: "your_spotify_client_id"
secret: "your_spotify_client_secret"
redirectUri: "https://your-domain.com/auth/spotify/callback"
NODES:
- host: "localhost"
port: 2333
name: "Main"
auth: "youshallnotpass"
secure: false
driver: "lavalink/v4"| Key | Type | Description |
|---|---|---|
SPOTIFY.enable | boolean | Enable Spotify integration |
SPOTIFY.id | string | Spotify Client ID (from Spotify Dashboard (opens in a new tab)) |
SPOTIFY.secret | string | Spotify Client Secret |
SPOTIFY.redirectUri | string | Redirect URI for Spotify OAuth (dashboard integration) |
NODES[].host | string | Lavalink server hostname |
NODES[].port | number | Lavalink server port (default: 2333) |
NODES[].name | string | Node display name |
NODES[].auth | string | Lavalink password (must match application.yml) |
NODES[].secure | boolean | Use SSL/TLS for the connection |
NODES[].driver | string | Must be lavalink/v4 |
You can add multiple nodes for redundancy. The bot distributes players across available nodes.
A reference Lavalink application.yml is provided at backend/additional-file/application.yml. This file can be reconfigured to suit your needs (ports, passwords, plugins, source settings, etc.).
features.DATABASE Section
Configure your database driver. Supported drivers: mongodb, mysql, postgres, json.
Recommendation: Use
jsonfor development. For production, usepostgres(recommended) ormysql.
PostgreSQL
features:
DATABASE:
driver: "postgres" # Note: mongodb, mysql, json, postgres
config:
host: "localhost"
user: "me"
password: "secret"
database: "my_db"MySQL
features:
DATABASE:
driver: "mysql" # Note: mongodb, mysql, json, postgres
config:
host: "localhost"
port: 3306
user: "me"
password: "secret"
database: "my_db"MongoDB
features:
DATABASE:
driver: "mongodb" # Note: mongodb, mysql, json, postgres
config:
uri: "mongodb://127.0.0.1:27017/mewwme"JSON (Development Only)
features:
DATABASE:
driver: "json" # mongodb, mysql, json, postgres
config: { path: "./mewwme.database.json" }Additional Database Settings
features:
DATABASE:
ClearCache: "*/60 * * * * *" # Cache clear schedule (cron)| Key | Type | Description |
|---|---|---|
ClearCache | string | Cron expression for clearing the in-memory cache |
driver | string | Database driver: json, mongodb, mysql, postgres |
config.uri | string | MongoDB connection URI |
config.host | string | MySQL/PostgreSQL hostname |
config.user | string | MySQL/PostgreSQL username |
config.password | string | MySQL/PostgreSQL password |
config.database | string | MySQL/PostgreSQL database name |
config.port | number | MySQL port (default: 3306) |
config.path | string | JSON file path (default: ./mewwme.database.json) |
features.RestAPI Section
features:
RestAPI:
auth: "your_secret_token"
enable: true
port: 2555
whitelist: ["meww.me"]
SessionSecret: "random_hex_string"
DiscordClientId: "..."
DiscordClientSecret: "..."
DiscordRedirectUri: "http://localhost:2555/auth/discord/callback"
DashboardUrl: "http://localhost:3000"| Key | Type | Description |
|---|---|---|
auth | string | Internal API authentication token. Used by WebSocket bridge and REST API |
enable | boolean | Enable/disable the REST API server |
port | number | API server port (default: 2555) |
whitelist | string[] | Allowed domains. Empty array = allow all |
SessionSecret | string | Session encryption key. Override with SESSION_SECRET env var |
DiscordClientId | string | Discord application Client ID. Override with DISCORD_CLIENT_ID |
DiscordClientSecret | string | Discord application Client Secret. Override with DISCORD_CLIENT_SECRET |
DiscordRedirectUri | string | Discord OAuth2 redirect URI. Override with DISCORD_REDIRECT_URI |
DashboardUrl | string | Frontend URL for CORS and redirects. Override with FRONTEND_URL |
features.WebServer Section
features:
WebServer:
enable: true
Port: 2444
BaseUrl: "https://ws.example.com"
TOPGG_VOTELOGS:
Enable: true
TopGgWebhookSecret: "..."
LogVoteChannelID: "..."
LAST_FM_SCROBBLED:
Enable: true
ApiKey: "..."
Secret: "..."
Callback: "https://ws.example.com/lastfm"
scheduleScrobble: 60000| Key | Type | Description |
|---|---|---|
enable | boolean | Enable/disable the Express webhook server |
Port | number | Express server port (default: 2444) |
BaseUrl | string | Public base URL for this server |
TOPGG_VOTELOGS.Enable | boolean | Enable Top.gg vote logging |
TOPGG_VOTELOGS.TopGgWebhookSecret | string | Top.gg webhook authorization secret |
TOPGG_VOTELOGS.LogVoteChannelID | string | Discord channel ID for vote log messages |
LAST_FM_SCROBBLED.Enable | boolean | Enable Last.fm scrobbling |
LAST_FM_SCROBBLED.ApiKey | string | Last.fm API key |
LAST_FM_SCROBBLED.Secret | string | Last.fm API secret |
LAST_FM_SCROBBLED.Callback | string | Last.fm OAuth callback URL |
LAST_FM_SCROBBLED.scheduleScrobble | number | Scrobble processing interval in milliseconds |
Patreon Section
Patreon:
Enable: true
AccessToken: "..."
CampaignId: "..."
MinTierPrice: 500| Key | Type | Description |
|---|---|---|
Enable | boolean | Enable Patreon integration |
AccessToken | string | Patreon Creator Access Token |
CampaignId | string | Patreon campaign ID (use scripts/getCampignId.js to find it) |
MinTierPrice | number | Minimum tier price in cents to qualify for premium |
KoFi Section
KoFi:
Enable: true
VerificationToken: "..."| Key | Type | Description |
|---|---|---|
Enable | boolean | Enable Ko-fi integration |
VerificationToken | string | Ko-fi webhook verification token |
PremiumRole Section
PremiumRole:
Enable: true
GuildId: "..."
RoleId: "..."| Key | Type | Description |
|---|---|---|
Enable | boolean | Enable premium via Discord role |
GuildId | string | The guild where the premium role exists |
RoleId | string | The role ID that grants premium status |
logchannel Section
logchannel:
GuildJoinChannelId: "..."
GuildLeaveChannelId: "..."
ErrorChannelId: "..."Channel IDs for various bot log outputs. Set to empty string to disable specific log channels.
GeminiAiChat Section
GeminiAiChat:
Enable: true
ApiKeys:
- "GEMINI_API_KEY_1"
- "GEMINI_API_KEY_2"
Models:
- "gemini-2.5-flash"
- "gemini-2.0-flash"| Key | Type | Description |
|---|---|---|
Enable | boolean | Enable AI Chat feature |
ApiKeys | string[] | Google Gemini API keys (auto-rotate on quota errors) |
Models | string[] | Ordered model list (falls back to next on failure) |
Get API keys from Google AI Studio (opens in a new tab).
COMMANDS_ACCESS Section
COMMANDS_ACCESS:
MUSIC:
Play: ["Member"]
MusicTrivia: ["Member"]
FILTER:
Nightcore: ["Member"]
GAMES:
2048: ["Member"]
# ...Controls permission levels per command. Available levels: Owner, Admin, Manager, Premium, Voter, Member.
DASHBOARD_ACCESS Section
DASHBOARD_ACCESS:
Filters: ["Voter"]
TwentyFourSeven: ["Voter"]
Autoplay: ["Voter"]
LastFm: ["Voter"]
Spotify: ["Voter"]
SongRequest: ["Voter"]
Language: ["Voter"]
StatusVoiceChannel: ["Voter"]
Prefix: ["Voter"]
DjRole: ["Voter"]
ControlButton: ["Voter"]
Playlist: ["Voter"]
AiChat: ["Member"]Controls access levels for dashboard features. When a user lacks access, the frontend renders a blurred overlay with an action button (vote link or premium info).
| Level | Behavior |
|---|---|
Member | No restriction |
Voter | Must have voted on Top.gg. Premium users bypass |
Premium | Premium users only. Owner/Admin bypass |
Manager | Requires Manage Server permission |
Admin | Bot admin only |
Owner | Bot owner only |
features.PLAY_COMMAND_ENGINE Section
features:
PLAY_COMMAND_ENGINE:
default: "ytsearch"
sources:
- "ytsearch"
- "scsearch"
- "spsearch"Controls the default search engine and available sources for the /play command.
features.AUTOFIX_LAVALINK Section
features:
AUTOFIX_LAVALINK:
enable: true
retryCount: 10
retryTimeout: 3000Enables automatic Lavalink node recovery when nodes go offline.
features.MESSAGE_CONTENT Section
features:
MESSAGE_CONTENT:
enable: true
prefix: "!"Enables prefix-based commands in addition to slash commands.
emojis Section
emojis:
play: "▶️"
pause: "⏸️"
skip: "⏭️"
stop: "⏹️"
loop: "🔁"
# ...Custom emoji configuration for player buttons and menus. Use Unicode emoji or custom Discord emoji IDs.
WELCOMER_EVENTS Section
WELCOMER_EVENTS:
enable: true
welcomeChannel: "..."
leaveChannel: "..."Configures the canvas-based welcome/leave image system.
Environment Variables Summary
| Variable | Config Path | Description |
|---|---|---|
TOKEN | bot.TOKEN | Discord bot token |
SESSION_SECRET | features.RestAPI.SessionSecret | Session encryption key |
DISCORD_CLIENT_ID | features.RestAPI.DiscordClientId | Discord OAuth2 Client ID |
DISCORD_CLIENT_SECRET | features.RestAPI.DiscordClientSecret | Discord OAuth2 Client Secret |
DISCORD_REDIRECT_URI | features.RestAPI.DiscordRedirectUri | Discord OAuth2 redirect URI |
FRONTEND_URL | features.RestAPI.DashboardUrl | Frontend URL for CORS |
NODE_ENV | - | production enables secure cookies and trust proxy |