AjdnikovPanel Documentation
AjdnikovPanel is network-wide monitoring for Minecraft servers: a live web dashboard, lag analysis in plain words, player inspection, alerts and a Discord bot. One hub runs inside your proxy (or one Paper server) and one agent runs on every server you want to watch. You open the dashboard from your AnziLock account — the hub connects out to it, so there is no dashboard port, password or address to set up.
Getting Started
Requirements
- Java 25 on the hosts
- Paper 1.21.x for agents and the standalone hub, and/or Velocity 3.4+ for the proxy hub
- A licence key from AnziLock for the hub, and an outgoing HTTPS connection to it. Agents need neither.
- Folia is not supported
Components
| Jar | Install on | Data folder |
|---|---|---|
Panel-Velocity-1.2.0.jar | The Velocity proxy — hosts the hub and the Discord bot (recommended for networks) | plugins/ajdnikovpanel/ |
Panel-Paper-1.2.0.jar | One Paper server, for setups without a proxy | plugins/AjdnikovPanelHub/ |
Panel-Agent-1.2.0.jar | Every Paper server you want to monitor | plugins/AjdnikovPanel/ |
Install one hub. It collects what the agents send, stores history in a local SQLite file and sends Discord alerts. No database server, Docker or extra process is needed. The panel has no in-game commands: everything is done from the dashboard, the config files and the Discord bot.
How the pieces connect
- Agents → hub: each agent batches what it collects and ships it every ~500 ms, either through the proxy's
ajdnikov:panelplugin-message channel or over HTTP to the hub's port. - Hub → you: the hub opens an outgoing, licence-checked connection to AnziLock (the relay), and AnziLock passes your dashboard through it. You never expose a dashboard port or run a tunnel yourself.
- Hub → agents: commands such as "scan now" go back over the proxy channel when possible, and in the answer to the agent's next HTTP batch.
Installation
Step 1: Install the hub
On Velocity (recommended)
- Put
Panel-Velocity-1.2.0.jarinto the proxy'splugins/folder and start the proxy once. This createsplugins/ajdnikovpanel/config.properties. - Set your licence key — everything else has sensible defaults:
licenseKey=ANZI-XXXXX-XXXXX-XXXXX-XXXXX - Restart the proxy. The log shows
Dashboard relay connected. Open the dashboard at https://license.ajdnikov-dev.com/networks/...
Problems in config.properties are logged as config.properties: ... warnings.
On Paper (no proxy)
Put Panel-Paper-1.2.0.jar into one Paper server's plugins/ folder instead and configure plugins/AjdnikovPanelHub/config.properties the same way. Every monitored server — including the one hosting the hub — then reports over HTTP, and the topology view shows them as standalone servers.
Step 2: Open the dashboard
Sign in at license.ajdnikov-dev.com with the Discord account your licence belongs to and open Networks. Each hub running on your licence is listed with its status and players; open it to see the dashboard. Links in Discord alerts go straight to the right page.
Step 3: Register each server
In the network, open Settings → Servers. Enter a name and, optionally, an id (e.g. survival), pick the type, and choose Register.
| Type | Meaning |
|---|---|
BACKEND | Behind the Velocity proxy that hosts the hub |
STANDALONE | Anything else: its own IP, another network, or the hub-on-Paper setup |
The dialog shows the API key (pk_...) once, with a ready-made config snippet. If you lose it, use New key.
Step 4: Install the agent on each server
- Put
Panel-Agent-1.2.0.jarinto the server'splugins/folder and start it once. Optional: install Vault and an economy plugin to see player balances. - Edit
plugins/AjdnikovPanel/config.ymland paste the snippet from step 3:server-id: "survival" api-key: "pk_..." hub-url: "http://proxy-host:8080" transport: auto - Restart the server. It shows up in the dashboard with its first heartbeat, within 10 seconds.
server-idmust be the id the key was issued for.hub-urlis the hub'sporton the machine running it — the agent port, not a dashboard.transport:plugin-messageuses the proxy channel and only works for backends behind the Velocity hub, and only while a player is online to carry the messages.httpsends tohub-url— use it for standalone servers and the hub-on-Paper setup.auto(default) uses HTTP whenhub-urlandapi-keyare set, and plugin messages otherwise.
Set hub-url even on backends. HTTP is the only way the agent knows its data arrived, and it works whether or not anyone is online.
Step 5: Optional extras
- Real item icons: set
acceptMojangEula=true(see Item icons). - Discord alerts and bot: see Discord.
- HTTPS for agents: see HTTPS.
Firewall & Upgrading
| Traffic | Port | Needed when |
|---|---|---|
| Hub → AnziLock (HTTPS, WebSocket) | 443 outbound | Always: licence checks and the dashboard relay |
| Agent → hub (HTTP) | port (8080) inbound | Agents using http or auto |
| Hub → Discord (HTTPS, WebSocket) | 443 outbound | Discord is configured |
| Hub → Mojang (HTTPS) | 443 outbound | acceptMojangEula=true, once |
Nothing needs to reach the hub from the internet. If every agent runs on the same machine or only uses plugin-message, set bindAddress=127.0.0.1 and open no inbound port at all.
Upgrading
Replace the jars and restart. The hub migrates panel.db itself, and new settings are appended to your config.properties with explanations. Your existing values stay untouched.
- From 1.1 and older: the dashboard moved to AnziLock.
adminPassword,sessionHoursandpublicUrlare no longer used (the hub says so once per start; you can delete them), and the hub's port now only receives agent data. Nothing else changes for agents. - From versions with a single
discordWebhookUrl: it moved todiscord.webhook.url. The old key keeps working until you move it; the hub logs a reminder.
Hub: config.properties
The hub's file lives in plugins/ajdnikovpanel/ (Velocity) or plugins/AjdnikovPanelHub/ (Paper). It is written as a commented template, grouped into sections. When an update adds settings, they are appended to the end of your existing file with their explanations; your values are never rewritten. Restart the proxy or server after editing.
Values are checked at start-up. Anything the hub cannot use — misspelled names, numbers out of range, unknown event names, malformed Discord IDs — is logged as a warning and the default applies instead:
[AjdnikovPanel] config.properties: unknown setting 'prot' is ignored (typo?)
[AjdnikovPanel] config.properties: heartbeatMisses='0' is not a whole number from 1 to 360; using 3
Booleans accept true/false, yes/no and on/off. Paths are relative to the plugin folder unless absolute.
License
| Setting | Default | Description |
|---|---|---|
licenseKey | (empty) | Your licence key (ANZI-...). The hub does not start without a valid key. |
Agent connections
| Setting | Default | Description |
|---|---|---|
port | 8080 | Port agents send their data to (transport: http or auto). |
bindAddress | 0.0.0.0 | Interface to listen on. 127.0.0.1 is enough when every agent runs on this machine or reports through the proxy. |
HTTPS
Only needed when agents send over untrusted networks. On a trusted LAN plain HTTP is fine; behind a reverse proxy that handles HTTPS, leave this off.
| Setting | Default | Description |
|---|---|---|
tlsEnabled | false | Serve HTTPS instead of HTTP. Agents then use https:// in their hub-url. |
tlsCert | (empty) | PEM certificate chain, e.g. fullchain.pem. |
tlsKey | (empty) | PEM private key in PKCS#8 format. Convert with openssl pkcs8 -topk8 -nocrypt -in key.pem -out key-pkcs8.pem. |
Monitoring and alerts
| Setting | Default | Description |
|---|---|---|
heartbeatMisses | 3 | Agents send a heartbeat every 10 s. After this many missed heartbeats in a row, a server is reported down (3 = 30 s). |
lagAlertCooldownMinutes | 10 | A lag alert for the same cause on the same server is not repeated within this time. A different main cause alerts immediately. |
Data retention
History lives in panel.db (SQLite) in the plugin folder. Expired rows are deleted once an hour.
| Setting | Default | Keeps |
|---|---|---|
retention.metricsHours | 24 | TPS, tick time, memory and CPU graphs |
retention.lagReportsHours | 24 | Lag analysis reports |
retention.interactionsDays | 7 | Logged sign placement, edits and clicks, and crafting |
retention.historyDays | 90 | Alerts, player routing, dupe flags and finished play sessions |
retention.consoleLines | 1000 | Console lines kept per server |
Item icons
| Setting | Default | Description |
|---|---|---|
acceptMojangEula | false | true lets the hub download the official Minecraft client jar from Mojang once (about 35 MB) to draw real item icons. Setting it means you accept the Minecraft EULA. Offline hubs can instead copy a client jar to assets/client.jar in the plugin folder. |
assetsVersion | auto | Minecraft version for the icons; auto uses the version your servers report. |
Discord webhooks
| Setting | Default | Description |
|---|---|---|
discord.webhook.url | (empty) | Webhook URL. Empty means no webhook. |
discord.webhook.events | all | Events to post, comma-separated: server-down, server-up, dupe-flag, lag, lag-over, or all. |
discord.webhook.servers | (empty) | Only post about these server ids, comma-separated. Empty means every server. |
discord.webhook.mention | (empty) | Who to ping on server-down, dupe-flag and lag: @here, @everyone, a role ID, or <@&role>/<@user>. Recoveries never ping. |
discord.username | AjdnikovPanel | Name webhook posts appear under. |
discord.avatarUrl | (empty) | Avatar for webhook posts. Empty uses the webhook's own avatar. |
Additional webhooks: repeat the four discord.webhook.* settings under a name of your choice, e.g. discord.webhook.staff.url, .events, .servers and .mention.
Discord bot
| Setting | Default | Description |
|---|---|---|
discord.bot.enabled | false | Run the bot. |
discord.bot.token | (empty) | Bot token from the Developer Portal. Keep it secret. |
discord.bot.guildId | (empty) | Your Discord server's ID. Commands appear there instantly and are refused elsewhere. Empty registers global commands. |
discord.bot.alertChannelId | (empty) | Channel the bot posts alerts to. Empty means the bot posts no alerts. |
discord.bot.alertEvents | all | Events the bot posts (same names as for webhooks). |
discord.bot.alertMention | (empty) | Who the bot pings on urgent alerts (same format as discord.webhook.mention). |
discord.bot.allowedRoleIds | (empty) | Role IDs allowed to use the commands, comma-separated. Members with Administrator always may. Empty means everyone who can see the commands. |
discord.bot.ephemeral | true | Answer privately: only the member who ran the command sees the answer. |
discord.bot.presence | true | Show "Watching 4/5 servers · 23 players" as the bot's status. |
A complete example
licenseKey=ANZI-XXXXX-XXXXX-XXXXX-XXXXX
port=8080
bindAddress=127.0.0.1
heartbeatMisses=3
retention.historyDays=30
acceptMojangEula=true
# everything to #server-status, pinging @here when something breaks
discord.webhook.url=https://discord.com/api/webhooks/123/abc
discord.webhook.mention=@here
# dupe flags from survival only, to the staff channel, pinging the Moderator role
discord.webhook.staff.url=https://discord.com/api/webhooks/456/def
discord.webhook.staff.events=dupe-flag
discord.webhook.staff.servers=survival
discord.webhook.staff.mention=987654321098765432
discord.bot.enabled=true
discord.bot.token=MTIz...
discord.bot.guildId=112233445566778899
discord.bot.allowedRoleIds=987654321098765432
Agent: config.yml
Each monitored server has plugins/AjdnikovPanel/config.yml, created with defaults on first start. Restart the server after editing.
| Setting | Default | Description |
|---|---|---|
server-id | "" | This server's id on the hub. Must match the server the API key was issued for; the hub rejects data for any other id. |
server-name | "" | Display name (informational). |
transport | auto | plugin-message, http or auto — see Step 4. |
hub-url | "" | The hub's address, e.g. http://proxy-host:8080. Required for http; recommended for auto. |
api-key | "" | The pk_... key from Settings → Servers → Register. |
heartbeat-interval-seconds | 10 | How often the server says "I'm alive". Keep 10: the hub's down detection counts in 10 s steps. |
metrics-sample-seconds | 5 | How often TPS, memory and CPU are sampled. |
metrics-report-seconds | 15 | How often samples are sent. |
console-streaming | true | Stream console output to the dashboard. |
dupe-detection.enabled | true | Heuristic duplication detection. It only flags; it never punishes. |
dupe-detection.stack-threshold | 128 | Flag a player holding more than this of one material. |
dupe-detection.jump-threshold | 64 | Flag an unexplained gain of more than this within the window. |
dupe-detection.window-seconds | 60 | Window for gain accounting. |
lag-analysis.enabled | true | Scan for lag causes (needed for /lag, /scan and lag alerts). |
lag-analysis.interval-seconds | 300 | Scan interval while the server runs fine. |
lag-analysis.lagging-interval-seconds | 30 | Scan interval while it lags. |
lag-analysis.scan-budget-ms | 1.0 | Main-thread time a scan may use per tick. Scans are spread over as many ticks as needed, so a scan cannot cause lag itself. |
lag-analysis.spike-sampler | true | Sample the main thread during slow ticks to measure which plugin or game system is responsible. Costs nothing while ticks are on time. |
lag-analysis.spike-threshold-ms | 50 | A tick longer than this counts as slow (minimum 20). |
Discord
Use webhooks, the bot, or both. Everything runs inside the hub — no separate bot host or extra plugin — and no outgoing Discord connections are made until you configure it.
What alerts look like
Every alert is an embed, coloured by type, that links to that server's dashboard page on AnziLock.
| Event | Name in config | Pings? | Contents |
|---|---|---|---|
| Server stopped reporting | server-down | yes | Last heard from, players affected |
| Server reporting again | server-up | no | How long it was down |
| Dupe flag | dupe-flag | yes | Player (with head), item and amount, reason, recent events |
| Lag started, or the main cause changed | lag | yes | TPS, tick time, main cause, where (with a /tp command), what to do |
| Lag is over | lag-over | no | Current TPS |
Player names are escaped, so xX_Steve_Xx doesn't turn into italics. Lag alerts for the same cause are rate-limited by lagAlertCooldownMinutes.
Webhooks
- In Discord, open the channel's settings → Integrations → Webhooks → New Webhook, then Copy Webhook URL.
- Set
discord.webhook.url=...in the hub'sconfig.properties. - Restart, then open Settings → Discord in the dashboard and press Send test message. Each webhook reports ✓, or the reason it failed.
Choosing what goes where
# the main webhook: everything, pinging @here when something breaks
discord.webhook.url=https://discord.com/api/webhooks/123/abc
discord.webhook.events=all
discord.webhook.mention=@here
# staff channel: only dupe flags, only from survival and skyblock, pinging a role
discord.webhook.staff.url=https://discord.com/api/webhooks/456/def
discord.webhook.staff.events=dupe-flag
discord.webhook.staff.servers=survival,skyblock
discord.webhook.staff.mention=987654321098765432
# ops channel: availability only, nobody pinged
discord.webhook.ops.url=https://discord.com/api/webhooks/789/ghi
discord.webhook.ops.events=server-down,server-up
The name between discord.webhook. and .url is yours to choose (letters, digits, - and _). It appears in the dashboard and in log messages, so a webhook URL — which works like a password — is never logged or shown. If Discord rate-limits a webhook, the hub waits as long as Discord asks and retries up to three times.
Mentions
| Value | Pings |
|---|---|
| (empty) | Nobody |
@here / @everyone | Online members / everyone in the channel |
987654321098765432 or <@&987654321098765432> | That role. The role must be mentionable, or the webhook needs permission to mention it. |
<@123456789012345678> | That user |
The bot
- Create it: at discord.com/developers/applications choose New Application, open Bot, Reset Token and copy it. Consider turning Public Bot off. The bot needs no privileged intents.
- Configure the hub:
Withdiscord.bot.enabled=true discord.bot.token=MTIzNDU2Nzg5... discord.bot.guildId=112233445566778899guildIdset, commands register in that server instantly and the bot refuses to answer anywhere else. Without it, commands are global and can take a while to appear. - Invite it: restart the hub. Settings → Discord shows Bot connected as YourBot and an invite button (scopes
botandapplications.commands, with View Channel, Send Messages and Embed Links). Once invited, commands register within a minute — no restart needed. - Optional — alerts from the bot: set
discord.bot.alertChannelId,alertEventsandalertMention. Send test message checks the channel together with the webhooks.
Bot commands
| Command | Answers with |
|---|---|
/status | Every server: online or offline, TPS, players, lag state. The footer has totals. |
/server server:<id> | One server: status, players, TPS, tick time, CPU, memory, uptime, chunks, lag verdict. |
/players [server:<id>] | Who is online, per server or on one server. |
/player name:<name> | Online or last seen, server, location, health, food, game mode, balance (with Vault), effects, session length. Works for offline players too. |
/lag server:<id> | The latest lag analysis: verdict and up to five likely causes, each with where it is and what to do. |
/scan server:<id> | Runs a lag scan now and edits in the result when the server reports back (up to 90 s). |
/alerts [count:<1-20>] | The most recent alerts. |
Server and player options autocomplete, and you can type a server's display name as well as its id.
Who can use the commands
The bot's answers include player locations, so decide who sees them:
discord.bot.ephemeral=true(default): answers are visible only to the member who asked.discord.bot.allowedRoleIds: only members with one of these roles, or with Administrator, get answers.- Discord's own command permissions (Server Settings → Integrations → your bot) can hide commands from roles or channels.
/scanis limited to members with Manage Server by default. discord.bot.guildId: the bot answers only in your server, even if someone else invites it.
With discord.bot.presence=true the bot's status reads Watching 4/5 servers · 23 players, refreshed every minute.
Dashboard
Sign in at license.ajdnikov-dev.com and open Networks. Every hub on your licence is a network there, with a lamp that is lit while it is connected, its players and servers, and its version (flagged when an update is available). Every view updates live; the header shows Live while the feed is connected. A network that is not connected still opens and explains why: the hub is down, or it runs a version older than 1.2.
Overview
Players online, servers up, average TPS and how many servers lag; each proxy with its backends and the standalone servers as a rack of modules (status lamp, TPS, players, lag verdict); live player routing; and Players and uptime over 24 hours, 7 or 30 days, sampled every 5 minutes.
Server
- Health: memory, CPU, disk, uptime, worlds and loaded chunks, and TPS and tick-time (MSPT) graphs over
retention.metricsHours. - Lag analysis: see below.
- Players: who is online, linking to their player pages.
- Console: a live tail of the server console (
console-streaming).
Player
Session time, live health, hunger and effects, Vault balance, location, game mode and routing history. The inventory and ender chest are drawn like in the game, with real item and block icons, durability bars, enchantment glint, and tooltips showing lore and shulker box or bundle contents. Also: the player's dupe flags and logged interactions (signs placed, edited or clicked, and crafting). The inventory view is read-only.
Alerts & the dupe detector
Servers going down or coming back, dupe flags, and lag starting, changing cause or ending — newest first, with live additions.
The dupe detector is a deliberately simple heuristic: a big stack of one material, or an unexplained jump within a window. It flags players for you to check and never punishes anyone. Gains it can account for are not flagged: mining, crafting (shift-click included), picking items up, trading, and taking items out of chests, ender chests, furnaces and other open inventories. What a player carries when they join is their starting point, and players in creative or spectator mode are not checked for gains.
Settings
- Servers: register servers and get their API keys, issue new keys, delete servers.
- Item icons: which game version the icons come from. The network's Item icons tab renders every item and lists any that could not be drawn — run it after a Minecraft update.
- Discord: configured webhooks and their filters, the bot's state, where its commands are registered, an invite link, and Send test message.
- Sharing and Support access (licence owner only).
Lag Analysis
The agent measures; the hub explains. Each server page starts with a one-line verdict, e.g. Lagging: 14.9 TPS, a tick takes 68 ms, followed by the likely causes in plain words, most impactful first:
Hoppers are slowing the server: 713 hoppers across 2 neighbouring chunks
in world at 200, 64, -110 (near Steve)
Each cause expands into every location (with a copyable /tp), the numbers behind it, what to do about it and, for measured causes, a stack sample.
- Confirmed causes are backed by timing: during slow ticks the agent samples the main thread and attributes the time to plugins or game systems.
- Possible causes are large counts known to be expensive: hopper piles, crowded mob farms, redstone clocks, force-loaded chunks and so on.
Scans run every 5 minutes, every 30 seconds while the server lags, and on demand with Scan now (or /scan in Discord). Scans are time-sliced, so they cannot cause lag themselves. On a healthy server every finding is capped at info.
Licensing & Relay
Licensing
The hub is licensed through AnziLock. Agents need no key; they are useless without a licensed hub.
- At start-up the hub verifies
licenseKeybefore it starts, and re-checks on the server-chosen heartbeat (by default every 10 minutes). - Every answer is Ed25519-signed and bound to a fresh nonce and this machine's hardware id. The public key is compiled into the jar.
- If the licence server is unreachable, the hub keeps running on its last signed OK for the product's grace period (cached as
.license-*in the plugin folder). A hub that has never been verified cannot start offline. - When a licence is rejected, the product's failure action runs: disable, shut down the server or proxy, or warn only.
The dashboard relay
The dashboard is not served from your machine. Once the licence is valid, the hub opens a WebSocket to AnziLock and proves itself with the licence key and this machine's hardware id. AnziLock answers with a welcome signed by the same Ed25519 key, bound to the hub's nonce; the hub refuses anything else, so a fake server cannot drive it.
From then on AnziLock signs people in with Discord, decides who may open the network, and passes their requests down the socket. The hub answers them from a dashboard API that listens on 127.0.0.1 only, on a random port, and accepts nothing that did not come through the relay.
- The relay reconnects on its own (1 s up to 1 min back-off). If AnziLock refuses the licence, it retries every 5 minutes.
- Every 15 seconds the hub reports player counts and server states for the network list. Nothing about individual players leaves the hub except while someone is looking at the dashboard.
- While AnziLock is unreachable the hub keeps collecting, storing and alerting; only the dashboard is unavailable.
Security & Backups
Security checklist
- Limit exposure. The hub's port only receives agent data. If every agent runs on this machine or uses
plugin-message, setbindAddress=127.0.0.1; otherwise allow only your agents' addresses. - Use HTTPS on untrusted networks (
tlsEnabledor a reverse proxy). Agents send their API key with every request. - Share deliberately. Viewers and admins can see player locations, inventories and console output. Remove them when they leave.
- Treat secrets as secrets: the licence key, API keys (
pk_..., stored only as SHA-256 hashes and shown once), Discord webhook URLs and the bot token. The hub never logs or displays webhook URLs or the bot token. - Discord bot: set
guildId, keepephemeral=trueor restrictallowedRoleIds, and turn off Public Bot.
Data and backups
| Path | What |
|---|---|
config.properties | Settings |
panel.db (+ -wal, -shm) | SQLite database: servers, API key hashes, metrics, sessions, alerts, lag reports, console |
assets/ | Extracted textures and the icon manifest (rebuilt automatically) |
.license-* | Signed licence cache |
To back up, stop the proxy or server, or copy all three panel.db* files together.
Troubleshooting
| Symptom | Check |
|---|---|
| Network shows not connected | The hub log: Dashboard relay connected means it is up. Dashboard relay cannot connect names the reason — outgoing HTTPS to license.ajdnikov-dev.com blocked, or the licence refused. |
| Network missing under Networks | You are signed in with a different Discord account than the licence owner, or the hub runs a version older than 1.2. |
| Hub doesn't start | Licence messages in the log; config.properties: warnings; a port conflict on the agent port (Failed to start AjdnikovPanel hub). |
| A server never shows up | server-id matches the registered id; api-key is correct; with http, hub-url is reachable from that machine (try <hub-url>/api/health); with plugin-message, a player must be online. |
| A server flips between down and up | Its heartbeats arrive late: an overloaded main thread or a slow network. Raise heartbeatMisses. |
payload is for server 'x' but the API key belongs to 'y' | server-id in the agent's config.yml doesn't match the key. |
| Item icons missing | Settings → Item icons shows the state. Without acceptMojangEula=true or assets/client.jar, the dashboard shows names only. |
| Disk keeps growing | Lower the retention.* settings; console lines are capped per server. |
Discord
| Symptom | Cause and fix |
|---|---|
| Settings → Discord says Not set up | No webhook URL and the bot isn't enabled. Check config.properties and the start-up log. |
Test message: HTTP 404: Unknown Webhook | The webhook was deleted. Create a new one and update the URL. |
Test message: HTTP 401 | The webhook URL was copied incompletely (the part after the last / is its token). |
| Bot stopped: Discord rejected the bot token | Wrong or reset token. Copy a fresh one from the Developer Portal. |
| Commands don't show up | Without guildId they are global and can take a while; set guildId. Also check Server Settings → Integrations for hidden commands. |
| Commands show up twice | The bot ran once without guildId and later with it, so both sets exist. Remove the global set through Discord's API: curl -X PUT -H "Authorization: Bot <token>" -H "Content-Type: application/json" -d "[]" https://discord.com/api/v10/applications/<application id>/commands |
Bot channel: HTTP 403: Missing Permissions | Give the bot View Channel, Send Messages and Embed Links in the alert channel. |
/scan times out | The agent has lag-analysis.enabled: false, or it is an HTTP agent that cannot reach the hub. |
| Links in embeds are missing | The hub has not connected to AnziLock yet since it started. |
Need more help?
Join the Discord server for support and bug reports. If you want someone from AnziLock to look at your network, grant support access first.