{ "PirateReportCog.report": { "details_md": "## What it does\nSubmit a player to the **Pirate Review Queue**. Mods get a compact card with the details and can approve ❇️ or reject ❌ with one click. If you include proof, it shows inline so they can decide faster.\n\n---\n\n## How to use — `/report`\nWhen you run **/report**, a small form opens:\n\n- **In-game nickname** \n The name they use in game. Example: `SandStalker`\n\n- **Account (Name#12345)** \n Must end with a `#` and **five digits**. Example: `SomeUser#12345` \n > If you only know the nickname, try to get the account tag too. It removes ambiguity later.\n\n- **Proof (Discord media URL — optional but strongly encouraged)** \n Paste a **direct Discord CDN** link so it previews nicely:\n - Accepts: `https://cdn.discordapp.com/...` or `https://media.discordapp.net/...`\n - Works with: **png, jpg, jpeg, gif, webp, mp4, webm, mov**\n - How to get the link: open the image/video in Discord ➜ “Open in browser” ➜ copy the address.\n\n> **Tip:** Images appear inside the mod card. Videos are kept as a plain link above the card so the inline video player works.\n\n---\n\n## What happens after you submit\n- You get a quick **thank-you** in the channel.\n- Mods receive an embed in their review channel with ✅ and ❌.\n- There’s a **“Jump to message”** button on the mod card so they can see the original context.\n- When a mod picks ✅/❌, the card is updated to show **Approved/Rejected** (with who decided and when). The small ack message in your channel is also edited to reflect the result.\n\nIf approved, the player is added to the pirate list (threat level starts at 0 and grows with encounters).\n\n---\n\n## Rules & limits (so you don’t run into errors)\n- **Account format:** must be `Name#12345`. Five digits. No spaces at the end.\n- **Proof link:** must be a Discord media link (see above). Non-Discord links are blocked.\n- **Duplicates:** already-approved players can’t be re-reported; exact pending duplicates are blocked too.\n- **Rate limit:** one report per user every **60 seconds**.\n\nCommon messages you might see:\n- `Invalid account format` → fix to `Name#12345`.\n- `URL must be a Discord media link` → use cdn.discordapp.com or media.discordapp.net.\n- `A report for this player is already pending` → a mod is already reviewing one.\n- `This player is already in the pirate list` → no need to report again.\n\n---\n\n## Good proof examples\n- Screenshot of **names** and actions in the **event log**.\n- Short clip (10–30s) that shows **what happened** and **who did it**.\n- If the situation is complex, add a quick text summary when you submit.\n\n---\n\n## Related actions\n- **/encounter** — log a new encounter with a known pirate. \n Fields:\n - *Pirate (name or account)* — `MuadDib` or `MuadDib#12345` (account preferred)\n - *Group size* — integer ≥ 1\n - *Kills* — integer ≥ 0 (0 = none/unknown)\n - *Destructive?* — `yes` / `no`\n - *Perceived Skill* — 0–5 (0 = unknown) \n Limits: one encounter per same pirate per reporter every **10 minutes**. These entries automatically update the pirate’s **threat level** and **encounter count**.\n\n- **/edit_pirate** *(moderators)* — update a pirate’s nickname/account.\n- **remove_pirate** *(moderators, hybrid)* — remove an approved entry.\n- **encounters_migrate_ids** *(moderators, hybrid)* — migrate old encounter identifiers.\n\n---\n\n## FAQ\n**Q: My proof link won’t accept.** \nA: It must be a direct Discord CDN URL (ends in a known image/video extension). Open the media in browser from Discord and copy that address.\n\n**Q: I only know their nickname and it says “ambiguous”.** \nA: Use the **account** form `Name#12345`. Nicknames can be shared.\n\n**Q: Do I have to add proof?** \nA: Optional, but it **really** helps mods decide quickly. Screenshots are usually enough.\n", "brief_html": "
\n Sends a player to the Pirate Review Queue. Mods get a card with ✅/❌.\n If you include a Discord media link, it will preview for them.\n
\n\n/report
SandStalker
Name#12345
(five digits)cdn.discordapp.com
/ media.discordapp.net
)\n Tip: Images show inside the card; videos stay as a link so the inline player works.\n
\n", "details_html": "\n Use /report
to send a player to the Pirate Review Queue.\n Mods see a compact card with your info and can approve or reject with one click.\n
SandStalker
#
+ five digits. Example: SomeUser#12345
https://cdn.discordapp.com/…
or\n https://media.discordapp.net/…
Name#12345
. Five digits – no spaces at the end.\n Typical messages: “Invalid account format”, “URL must be a Discord media link”, “A report for this player is already pending”.\n
\n\n/encounter
– log a new encounter with a known pirate (updates threat level over time)./edit_pirate
(mods) – update a pirate’s nickname/account.remove_pirate
(mods, hybrid) – remove an entry./encounter
Log a pirate encounter so threat scores stay fresh. Takes ~10 seconds.
\n\nName#12345
) or exact character name.Rate limit: you can report the same pirate once every 10 minutes.
\n\nAfter you submit, you’ll get a private “Encounter recorded” message and the pirate list updates shortly after.
\n", "details_html": "\n /encounter
adds a single encounter to the pirate’s history. These entries feed the\n threat score so the pirate list reflects how dangerous someone actually is right now.\n
Name#12345
. If you only know the character name, it must match exactly and not be ambiguous.\n yes
/no
. “Yes” if a base/ornithopter was destroyed, etc.\n Name#12345
ending with five digits).\n Each encounter contributes to a weighted score (0–100):\n
\ngroup ≥ T
(T comes from config).\n The weights are configurable (defaults: Kill 0.35, Destruction 0.30, Group 0.20, Skill 0.15). After you submit,\n the bot recomputes the pirate’s threat level and encounter count, then refreshes the list.\n
\n\nName#12345
) whenever possible — it guarantees the report hits the right person./report
first.Name#12345
)./edit_pirate
[Moderator]Edit an existing pirate entry. Use this when a player changes nickname or account tag.
\n\nName#12345
).Name#12345
.\n You must provide at least one of: new nickname or new account.
\n The account format is strict: #
+ five digits. Duplicate accounts are blocked.\n
\n Updates a pirate record that’s already approved. Typical cases: the player renamed their character,\n or moved to a new account tag.\n
\n\nSomeUser#12345
).Name#12345
. If the new value already exists on another pirate, it’s rejected./encounters_migrate_ids
[Moderator]\n Converts old encounter records stored by character name to the\n canonical account (Name#12345
).\n
\n Useful after adding pirates where past encounters referenced only nicknames.\n
\n", "details_html": "\n Scans stored encounters and rewrites any identifier that is a character name to the correct\n account for that pirate. Keeps data consistent for threat calculations.\n
\n\n#
+ five digits), it’s counted as “already accounts”.\n Moderator-only.\n
\n" }, "PirateReportCog.remove_pirate": { "brief_html": "/remove_pirate
[Moderator]Remove a pirate from the approved list by account.
\n\nName#12345
\n Account format must be Name#12345
. If the account isn’t found, you’ll get “Pirate not found.”\n
Deletes the matching pirate record from the approved list.
\n\nName#12345
)./avc_cleanup_now
[Moderator]Immediately deletes empty Auto-VC rooms that have been idle past the configured delay, then renumbers the rest.
\n\n\n Replies “Cleanup pass complete.” on success.\n
\n", "details_html": "Prefix 1..N
)./avc_renumber
[Moderator]Force a rename of all managed rooms to a clean numeric order without deleting anything.
\n\n\n Replies “Renumbered.” on success.\n
\n", "details_html": "Renames tracked rooms to {prefix} 1
, {prefix} 2
, … in creation order. No rooms are deleted.
/avc_status
Shows current Auto-VC setup and the list of managed rooms.
\n\n\n Output includes trigger channel, target category, name prefix, cleanup delay, and each tracked room with its current state.\n
\n", "details_html": "Room
→ Room 1
, Room 2
…).\nAuto-VC status:\nTrigger: <#1234567890> | Category: <#2345678901> | Prefix: `Room` | Delay: 30s\n- #1: Room 1 — 3 inside\n- #2: Room 2 — empty | idle 12s\n\n\n
\n This command is read-only and safe to run anytime.\n
\n" }, "NickNudgeCog.clear_nick_reviews": { "brief_html": "/clear_nick_reviews
[Moderator]Delete all pending nickname review records for this server.
\n\n\nReplies with how many pending entries were removed (ephemeral).\n
\n", "details_html": "\n Shows: Cleared N pending nickname review(s).
(ephemeral)\n
/recreate_nick_review
[Moderator]Recreate a single user’s missing pending review.
\n\n\nIf they’re already verified or already have a pending review, you’ll get a short explanation instead (ephemeral).\n
\n", "details_html": "/recreate_nick_reviews
[Moderator]Scan the server and recreate any missing pending reviews for users who claimed but never got a review opened.
\n\n\nReplies: Recreated X review(s); skipped Y.
(ephemeral)\n
/pirates_list_refresh
[Moderator]Rebuild the compact pirates list in the configured channel. Use this after adding/removing pirates or when encounter stats change.
\n\nPirates list refreshed.
(ephemeral)\n- Character (Account#12345) [Threat%]\n - In group: bucket. Destructive: bucket. Encounters: N. Last: <t:UNIX:R>\n\n
unknown
, never
, rarely
, sometimes
, often
, always
.pirates_list_channel_id
— where the list is posted.threat_group_threshold
— minimum party size that counts as “in group”.threat_min_samples_for_stats
— encounters needed before buckets stop showing unknown
./power restart
[Moderator]Safely restarts the bot after logging a clear reason to the modlog.
\n\n🔁 Restart requested — logging to modlog and restarting…
(ephemeral)The reason
must be specific enough to audit later:
stuck
, idk
, don't know
, unknown
, ?
,\n lag
, restart
, restarting
, update
, updating
,\n bug
, crash
, crashed
/power restart reason:\"Reloading cogs after changing threat weights and enabling nick loop; avoids inconsistent state.\"\n
/power restart reason:\"update\"\n
🔁 Bot Restart Requested\nBy: @YourName\nWhen: 2025-01-01 12:34 UTC\nRunning version: vX.Y.Z\nReason: Reloading cogs after threat weight change…\n
modlog_channel_id
— where the restart entry is posted. If not set, it falls back to server logs only.home_guild_id
— where the /power
group is registered (home-guild only vs global)./power restart
[Moderator]Safely restarts the bot after logging a clear reason to the modlog.
\n\n🔁 Restart requested — logging to modlog and restarting…
(ephemeral)The reason
must be specific enough to audit later:
stuck
, idk
, don't know
, unknown
, ?
,\n lag
, restart
, restarting
, update
, updating
,\n bug
, crash
, crashed
/power restart reason:\"Reloading cogs after changing threat weights and enabling nick loop; avoids inconsistent state.\"\n
/power restart reason:\"update\"\n
🔁 Bot Restart Requested\nBy: @YourName\nWhen: 2025-01-01 12:34 UTC\nRunning version: vX.Y.Z\nReason: Reloading cogs after threat weight change…\n
modlog_channel_id
— where the restart entry is posted. If not set, it falls back to server logs only.home_guild_id
— where the /power
group is registered (home-guild only vs global).Nick matches my in-game name. Tells mods your current server nickname (or global display name if you haven’t set one) already matches your in-game name, and opens a quick review.
\n\n/nick_same\n\n
Use this when your server nickname already matches your in-game character name. It opens a moderator review so you can get (or keep) access without typing anything else.
\n\n/nick_same\n
/nick_same
. The bot replies “Thanks — your nickname claim was sent for moderator review.”/nick_same
again (or react ✅ on the nickname message) to re-claim and re-review.Open the Spice Pay wizard. Step through participants, roles, payout type (Sand or Melange), and weighting. Shows a live preview and lets you post the result.
\n\n/spicepay [participants] [force_new]\n
participants
(optional): total people, incl. owners (1–25).force_new
(optional): start fresh if you already have a session.Calculate a fair split for a spice run. The wizard keeps things simple and transparent for the team.
\n\n/spicepay [participants] [force_new]\n
participants
is omitted, you set it in the first modal (1–25).force_new: true
to discard an existing session and start clean.For each slot:
\nrefiner
, carrier
, crawler
. Flexible input (e.g. “lsr”, “refinery”, “car”, “cr”).Use Add / Edit participant, Previous/Next to navigate. The preview shows filled vs. empty slots and highlights “owner-only”.
\n\nWhen switching to Melange, set the refinery yield (integer) in the modal.
\n\nThe post includes:
\nFootnote: “0% = owner only”.
\n" }, "SpicePayCog.spicepay_cancel": { "brief_html": "Cancel your active Spice Pay session. Clears everything for you so you can start fresh.
\n\n/spicepay_cancel\n\n
/spicepay
again to start over.Discards your current wizard state. Handy if you mis-entered totals or want to restructure the roster.
\n\nRun /spicepay
to start again. You can optionally pass participants
or just set them in the first modal.
Show server SpicePay weights. Read-only view of the defaults the wizard uses.
\n\n/spicepay_config\n\n
Shows the current default weighting used by the Spice Pay wizard.
\n\nConfigure via environment variables or your INI, then restart the bot. The wizard’s Adjust weighting factors lets users override per-run; those don’t change the server defaults.
\n\nReopen your active Spice Pay session. Useful if you closed the wizard message by accident.
\n\n/spicepay_resume\n\n
/spicepay
.Brings back the current session UI (if you already started one with /spicepay
).
Show a quick overview of commands or details about a specific command.
\n\n!help\n!help spicepay\n!help pirate\n!help encounter\n\n
!help spice
).Use !help
to see what the bot can do, or pass a keyword/command to jump straight to specifics.
!help
— shows a concise command list.!help spice
— narrows to commands that match “spice”.!help encounter
— shows usage for a single command if available.!help\n!help pirate\n!help spicepay\n!help encounter\n\n
Rebuild or update pirate cards for every known pirate in the configured channel.
\n\n/pirate_cards_rebuild\n\n
Runs a full pass that makes sure each verified pirate has a fresh, accurate card in the configured channel.
\n\nEphemeral summary, e.g.:
\nRebuilt/updated 27 pirate cards.\n\n
pirates_list_channel_id
for the destination channel.threat_group_threshold
, threat_min_samples_for_stats
).Re-check everyone and refresh the user cards. Also repairs Roles/RoE/nickname claims from the live reaction messages, and re-opens any missing nickname reviews.
\n\n/usercards_rescan\n\n
One-shot maintenance pass that makes the server’s user cards match reality.
\n\nUID:<id>
) to find/edit the right card; cleans up duplicates.The command replies (ephemeral) with counts like:
\nReconciled from messages. Changes — Rules: 3, RoE: 2, Nickname (added): 1, Nickname (removed): 0. Refreshed cards for 154 members.\n\n
Control the Deep Desert weekly loot updater. Stop/resume the scheduler or force a one-off start.
\n\n/dd_update <action> [reason]\n
action
— one of stop
, resume
, start
.reason
(optional) — short note shown in the confirmation.resume
.Manage the weekly “Deep Desert — Weekly Uniques” message updater for this guild.
\n\n/dd_update <action> [reason]\n
action
— stop
| resume
| start
reason
(optional) — free text appended to the confirmation response.resume
.SHAI_DD_CHANNEL_ID
(env). If unset, defaults to 1404764793377652807
.