1 Configuration EN
darksoon edited this page 2026-05-13 21:28:31 +02:00

Configuration

The central config file is configs/config.yml. Token, guildId, module toggles, channels, and roles are all defined here — everything else comes from the per-module YAMLs under configs/modules/.

Note: A .env file is no longer needed. DATABASE_URL falls back to file:./grumpy.db (SQLite).


config.yml — Full Overview

# Bot credentials
token: "YOUR_BOT_TOKEN"
guildId: "YOUR_SERVER_ID"

# Language for user-facing messages: "de" or "en"
language: "en"

# Optional: user IDs with full bot control
ownerIds: []

# Optional: Discord webhook for crash reports
errorWebhook: ""

# Bot presence — rotating custom activities instead of Discord's auto "In Voice"
presence:
  enabled: true
  status: "online"           # online | idle | dnd | invisible
  rotateSeconds: 60          # min 15 s (clamped). Single activity = static.
  activities:
    - "Watching Minetechworld.de"
    - "Listening to TechnoBase.FM"
    - "Playing /help"

# Modules — true = active, false = disabled
addons:
  welcome: true    # Welcome messages, verification, leave messages
  mod: true        # Moderation, Auto-Mod, Anti-Nuke, Reports, Audit Logger
  tickets: true    # Ticket system with panels and forms
  news: true       # News posts via DM
  voice: true      # Join-to-Create voice channels
  music: true      # Internet radio (TechnoBase.FM etc.)
  help: true       # Auto-deployed help hub
  customcmd: true  # /cc add ... — admin-defined /cmd commands

# Channel IDs — fill in all of these
channels:
  welcome: "ID"       # Welcome & leave messages
  verify: "ID"        # Verify panel (auto-posted)
  mod-log: "ID"       # Mod log + server audit logger
  alert: "ID"         # Anti-Nuke emergencies
  staff: "ID"         # Manual mod actions & reports
  support: "ID"       # Ticket panel fallback
  ticket-log: "ID"    # Ticket transcripts & summaries
  news: "ID"          # News posts
  voice-lobby: "ID"   # Join-to-Create lobby — user joins here, gets their own channel
  radio: "ID"         # Voice channel for Music passive mode (bot lives here)
  help: "ID"          # Help hub channel (embed auto-posted)
  suggestions: "ID"   # Suggestion board (/suggestion submit posts here)
  starboard: "ID"     # ⭐ Starboard output channel
  levelup: ""         # Level-up cards ("" = same channel, "dm" = DM, or channel ID)

# Role IDs — fill in all of these
roles:
  unverified: "ID"    # New members until verified
  member: "ID"        # After successful verification
  support:            # Who can manage tickets (multiple allowed)
    - "ID"            # e.g. Supporter
    - "ID"            # e.g. Moderator
  alert-ping: ""      # Role pinged during Anti-Nuke (optional)

⚠️ The message-ids: section from older versions is no longer used. Panel message IDs are managed in the database (WelcomeState, TicketPanelMessage).


Config Auto-Heal

On startup the bot checks configs/config.yml and adjusts the schema automatically:

  • Missing addon toggles (e.g. new modules like voice, help, customcmd) are added with their defaults.
  • Missing channel fields (e.g. voice-lobby, radio, help) are added as empty strings.
  • Missing presence: block is filled with default activities — existing config.yml files get the block added automatically on the next start.
  • Deprecated sections like message-ids: are removed.
  • Existing values and YAML comments are preserved — the bot uses yaml's parseDocument API and only merges the schema, not the data.

When the file is updated the console shows a short summary of the changes. This means after a bot update you don't need to manually edit any YAML to enable new modules — just start the bot and fill in the new fields afterwards.


Bot Presence

The presence: block in config.yml replaces Discord's auto-status (e.g. "In Voice Chat") with a custom rotating activity list.

presence:
  enabled: true
  status: "online"           # online | idle | dnd | invisible
  rotateSeconds: 60          # min 15 s (clamped)
  activities:
    - "Watching Minetechworld.de"
    - "Listening to TechnoBase.FM"
    - "Playing /help"

Activity Format

The verb at the beginning determines the activity type:

Prefix Discord Type
Watching X Watching
Playing X Playing
Listening to X Listening (the to is stripped)
Streaming X Streaming
Competing in X Competing (the in is stripped)
anything else Custom Status

Behaviour

  • rotateSeconds minimum 15 s (clamped upward if lower). With only one activity the display stays static.
  • enabled: false or an empty activities list → the bot lets Discord's default apply (e.g. "In Voice Chat").
  • Auto-Heal: Existing config.yml files get the presence: block added automatically on the next start — comments and values are preserved.

Module Toggles

The addons: section controls which modules are active:

Key Module Function
welcome Welcome Welcome messages, verification, raid protection, leave
mod Moderation Auto-Mod, Anti-Nuke, Reports, Warns, Audit Logger
tickets Tickets Multi-panels, forms, ticket management
news News News posts via admin DM
voice Voice Join-to-Create voice channels
music Music Internet radio in voice channel (Interactive + Passive)
help Help Help hub channel with module dropdown
customcmd CustomCmd Admin-defined /cmd commands
reactionroles ReactionRoles Self-service role panels via button/dropdown
leveling Leveling XP, rank cards, leaderboard, role rewards
suggestions Suggestions Suggestion system with 👍/👎 and status management
polls Polls Live polls with buttons
starboard Starboard Highlight the best messages

Copying IDs

Enable Developer Mode: Discord → Settings → Advanced → Developer Mode

What How
Channel ID Right-click a channel → Copy ID
Role ID Server Settings → Roles → right-click a role → Copy ID
Server ID Right-click the server icon → Copy ID
User ID Right-click a user → Copy ID

Auto-Deployment of Panels

On startup the bot checks:

  • Verify panel — is there a message ID in the DB? Is it still in the channel? If not: re-post.
  • Ticket panels — same logic for each panel entry in tickets.yml. If a panel has channelId: "0" it falls back to channels.support from config.yml.

Manual re-deploy is still available:

  • /welcome setup-verify
  • /tickets setup-panel <panel-id>

Module Configs

Each module has its own YAML file for feature-specific settings:

File Contents
configs/modules/welcome.yml Welcome/leave modes (banner / embed / text), banner colours, CAPTCHA, raid protection, verify embed
configs/modules/mod.yml Auto-Mod (spam, caps, ads, …), Anti-Nuke, escalation, report cooldown
configs/modules/tickets.yml Panels, categories, forms, auto-close, rating
configs/modules/news.yml Admin IDs, reactions, session timeout
configs/modules/voice.yml Lobby/category IDs, name template, auto-delete timer, channel limits
configs/modules/music.yml Radio stations (presets), volume, auto-leave, passive mode
configs/modules/help.yml Help embed content, quick-action buttons, optional module descriptions
configs/modules/reactionroles.yml Default colour for new panels
configs/modules/leveling.yml XP range, cooldown, voice XP/min, level-up channel, role rewards, accent colour
configs/modules/suggestions.yml Channel, cooldown, min/max length, vote emojis, staff roles
configs/modules/polls.yml Maximum duration in hours
configs/modules/starboard.yml Emoji, threshold, excluded channels, self-star

CustomCmd has no YAML — commands are managed entirely via /cc add in the database.

All YAMLs are created automatically with defaults on first start.

Module channel fallback chain: If channelId in a module YAML is empty, the bot falls back to the corresponding entry in config.yml:

  • suggestions.yml: channelIdchannels.suggestions
  • starboard.yml: channelIdchannels.starboard
  • leveling.yml: levelUp.channelchannels.levelup

Setup Status on Startup

When booting the bot displays an overview:

═══════════════════════════════════════════════════════
  GrumpyCore — Setup Status
═══════════════════════════════════════════════════════
  ✅ Connected to: Minetechworld.de (13 members)

  Modules:    welcome 🟢  mod 🟢  tickets 🟢  news 🟢

  Channels:   ✅ welcome ✅ verify ✅ mod-log ✅ alert
              ✅ staff   ✅ ticket-log ✅ news

  Roles:      ✅ unverified ✅ member  ✅ support

  Panels deployed:
    ✅ verify-panel    msg 1234...
    ✅ support         msg 5678...
═══════════════════════════════════════════════════════

Missing channels/roles are marked with — add them to config.yml and restart the bot.