DUXPLIMA Documentation

Logging

Chat, join/leave and audit logs, each through its own webhook.

Three logs, all in logging.yml, all posted through webhooks rather than the bot: chat, join/leave, and audit.

Each section takes its own webhook-url, so each can go to a different channel with different permissions — which is the point of separating them.

Chat logging

chat-logging:
  enabled: true
  webhook-url: "YOUR_WEBHOOK_URL_HERE"
  format: "**[%server_name%]** %player%: %message%"
  use-embed: false

Placeholders: %player%, %player_displayname%, %message%, %server_name%, %world%, %timestamp%.

use-embed: true switches to an embed with the player's head as the author icon. Plain text is denser and easier to search; embeds read better. For a log you actually scroll through looking for something, plain text wins.

Filtering

filter:
  ignore-prefixes: ["/", "!", "#"]
  min-length: 1
  max-length: 500
  ignored-permission: ""

ignore-prefixes keeps commands out of the chat log — including any typed as /msg, which is why / is there by default. Setting ignored-permission to something like uxmdiscordsync.chatlog.ignore exempts staff from being logged.

max-length: 500 truncates rather than dropping.

Rate limiting

rate-limit:
  enabled: true
  max-messages-per-minute: 30

Thirty is Discord's own webhook allowance. Raising it does not raise Discord's limit — it only means messages get dropped by Discord instead of by the plugin.

Join and leave

Two independent sections: join-leave-logging.minecraft for the game server, and join-leave-logging.discord for guild membership. Each has its own webhook and its own join and leave messages, in plain text or embed form.

Minecraft placeholders: %player%, %player_displayname%, %player_uuid%, %server_name%, %online_players%, %max_players%.

Discord placeholders: %user%, %user_tag%, %user_id%, %user_avatar_url%, %member_count%.

Discord member logging requires the Server Members intent.

Audit logging

audit:
  enabled: true
  account-link:
    enabled: true
    webhook-url: "..."
  account-unlink:
    enabled: true
  boost-claim:
    enabled: true
  rank-sync:
    enabled: true

Four event types, each with its own webhook and its own embed. These are the records you go back to when something is disputed: who linked to which Discord account and when, who claimed a boost reward, what roles a sync actually changed.

Point them at a staff-only channel. %player_uuid% and %discord_id% in the default embeds are what make an entry identifiable months later, and neither belongs in a public channel.

rank-sync fills %minecraft_ranks% and %discord_roles% with what the player had at the time, which turns "the plugin removed my role" into a question with an answer.

Retention

cleanup:
  delete-old-logs-after-days: 30

in advanced.yml. Applies to audit records held in the database; the webhook posts in Discord stay until you delete them. Set it to 0 to keep everything.

Webhook URLs are credentials

A webhook URL is enough for anyone to post in that channel as the webhook — no bot, no token, no membership. Keep logging.yml out of public repositories and out of pastes in support channels, and delete and recreate the webhook if one leaks.