Skip to content

Troubleshooting

DynaDev edited this page Aug 12, 2026 · 1 revision

Troubleshooting

Start with /townyalerts status

Run:

/townyalerts status

Check:

  • Towny detected
  • DiscordSRV detected
  • JDA state
  • Discord channel state
  • Requested/resolved language
  • Storage backend
  • Storage state

Test Discord

Run:

/townyalerts test

If this fails:

  1. Confirm DiscordSRV is connected.
  2. Confirm the configured value is a Discord channel ID.
  3. Confirm the DiscordSRV bot can access the channel.
  4. Confirm the bot has permission to send messages.
  5. Check the server console for the TownyAlerts warning/error.

DiscordSRV is detected but not ready

DiscordSRV initializes asynchronously.

TownyAlerts supports bounded retries:

retry:
  enabled: true
  max-attempts: 3
  delay-seconds: 5

If DiscordSRV never becomes ready, troubleshoot DiscordSRV itself first.

Wrong language

Check:

language: "en"

Then run:

/townyalerts reload

Use:

/townyalerts status

to compare the requested and resolved locale.

Remember:

en -> en-us
es -> es-cl

If the selected language does not exist, TownyAlerts falls back to English.

Custom language file is partially English

This is expected if the custom pack is missing keys.

Missing keys automatically fall back to en-us.yml.

Compare the custom YAML against the bundled English file.

SQLite does not start

Check:

storage:
  type: sqlite

  sqlite:
    file: "townyalerts.db"

The path must remain inside the TownyAlerts data folder.

Absolute paths and traversal such as ../../ are intentionally rejected.

Then run:

/townyalerts storage test

MariaDB/MySQL connection fails

Check:

  • Host
  • Port
  • Database name
  • Username
  • Password or environment variable
  • Firewall/network permissions
  • Database user grants
  • TLS/SSL setting

TownyAlerts does not create the database or DB user automatically.

Run:

/townyalerts storage test

TownyAlerts intentionally avoids printing the password.

Password environment variable

Example:

storage:
  remote:
    password: ""
    password-env: "TOWNYALERTS_DB_PASSWORD"

Make sure the environment variable is available to the Java process that starts the Minecraft server.

Setting it in an interactive shell does not necessarily make it available to a hosting panel, systemd service, Docker container, or Pterodactyl instance.

New Day notice says only the schedule passed

This is intentional.

Towny timing APIs can determine the scheduled time, but schedule timing alone does not prove that the previous New Day executed.

TownyAlerts only uses stronger wording when it has reliable evidence.

See Missed New Day.

Duplicate missed notice in MEMORY mode

MEMORY mode does not persist deduplication across process restarts.

Use SQLite, MariaDB or MySQL if persistent deduplication across restarts is required.

Plugin does not load on Folia

Folia is not advertised as supported by beta.3.

Do not force-enable unsupported metadata.

Reporting a bug

Include:

Minecraft:
Server software/build:
Java:
Towny:
DiscordSRV:
TownyAlerts:
Storage backend:
Language:

Then include the smallest relevant console error.

Never publish database passwords, Discord tokens or other secrets in an issue.

Clone this wiki locally