πŸ“– Commands & API

Everything Vortex Raid Tool answers to. Member commands work anywhere β€” best in a DM with the bot; replies are private either way. Officer commands need the Management Discord role (checked live, DMs included). Locked pages open with the Log in button in the menu: officer passphrase, or the guildmaster password which unlocks everything.

Discord β€” everyone

/helpThis list, inside Discord.
/wish importReplace your wishlist from a WoWSims or Sixty Upgrades Export β†’ JSON (gems/enchants filtered out). Lands in sim order β€” rank it afterwards.
/wish add <item>Add one item β€” instant autocomplete from the local item database, Wowhead links and IDs work too. Non-unique rings (the BT trash bands) can be added twice; unique/unique-equipped stay single.
/wish remove Β· /wish clearTake one item off, or wipe the list.
/wish listYour ranked list (1 = want it most) with reorder menus. Won items show struck through β€” crossed off automatically from the loot history, never deleted.
/wish rank <item> <position>Jump an item straight to a rank.
/wish webA personal 1-hour link to the browser editor β€” drag & drop reorder, search-to-add, paste an export to build from scratch. The link is the login.
/mark requestRequest your 2 Marks of the Illidari for this lockout (Wed–Tue) β€” bring 20g (10g each). Once per lockout; needs a guild rank (Raider / Trial / Member) β€” pickups can't.
/mark cancelWithdraw a pending request this lockout.
/mark listThis lockout's queue β€” who's waiting ⏳, who's been served βœ….
/mark history [name]All-time marks handed out β€” totals, or one raider's full log.
/assign <boss> [date]Assignments for one boss, generated from the next Raid-Helper comp: tanks, healer pairings, positions, misdirects, kick rotations, curses, Bloodlust β€” with the room diagram. boss:tonight gives every boss of the night; date picks another event. Officer pins and history are respected. Full page: assign.html.
/resist update <type> <amount>Record a resist set β€” fire / shadow / nature / arcane / frost, unbuffed amount from the character sheet (0 clears). Officers can add player to set someone else's. /resist list [type] shows holders best-first; /resist mine your own. Feeds resist-gated raid assignments.

Discord β€” officers Management role

/whowants <item>Everyone with the item still open on their wishlist, Priority order, with a debt preview per candidate ("if won (βˆ’30): 50.1 #9"). Tier tokens match set-piece listers; recipes match crafted-item listers.
/droplist <boss>The boss's whole loot table at once β€” wanted items first (most contested on top, top 3 claims each), unclaimed rest as a roll-or-shard footer.
/mrt [date] [everyone]The comp-selected roster as in-game character names (Discord nicks β†’ roster mains, accents restored from the logs), laid out exactly like the comp tool's export β€” each row is a slot position, columns are groups 1β†’5 β€” for pasting into Method Raid Tools. Live from Raid-Helper; likely alts and unknown names flagged. everyone = all signups instead of the comp (alphabetical, one per line).
/assign <boss> post:truePost the pull card in this channel β€” embed with the assignments and the room diagram. boss:tonight posts one card per boss. Posted cards update themselves when the comp or an officer pin changes.
/checkinWho is in tonight's Warcraft Logs upload vs the posted comp, right now β€” missing raiders, extras, and anyone not on the roster at all. The bot also posts this by itself 10 min after the raid start (reminder at 25).
/prio [name]The top of the board, or any raider's line.
/wish list member:@XAnyone's ranked list.
/wishadmin lock [phase] Β· unlock Β· statusPhase lock: freezes every wishlist completely; wins keep crossing off automatically. Unlock between phases.
/wishadmin review Β· repriceAwards flagged β€œdidn't respond on time”: list them, then reprice one to what it really was β€” standings rebuild on the spot.
/wishadmin nudge [send]DM regular raiders (6+ raid nights in the last 8 weeks) who still have no wishlist. Preview by default; send:true sends. Runs by itself too β€” see below.
/wishadmin digest on|offRun on in a channel: it gets one post per day after the first build (normally 23:45, minutes after raid) β€” recorded loot, weekly movers, top 5, new faces in the log, warnings.
/attendance set <name> <date> <status>Overrule one raider's night (attended / bench / noshow / missed) β€” replaces any earlier override for that night, rebuilds instantly. /attendance list shows what's on file.
/roster addAdd a recruit: character, class, role, Discord account, rank (default Trial). Attendance counts from today.
/roster link <character>File a character the logs saw that matches nobody: alt_of:<main> makes it their alt; member:@X puts it under that Discord account (their alt if they already have a main here, else a new main β€” class and role default to what the logs say); pickup:true keeps a pug out of the standings. The character field autocompletes from the unknown list.
/roster unknownCharacters seen in the logs or loot history with no roster entry β€” nights seen, class, and who they probably are (rostered that night but never in the log).
/mark given <name> Β· /mark undoTick mark hand-outs (20g collected) β€” walk-ups who never typed /mark request get recorded too, so once-per-lockout always holds.

Runs by itself

23:45 nightly buildPulls Warcraft Logs (attendance Β· parses Β· consumables), Raid-Helper (signups Β· comps) and the RCLootCouncil history, recomputes every score from raw data, republishes the site. Officer edits (repricing, overrides, pins, links) rebuild and republish within a minute.
Raid check-in10 min after the posted start: who is in the log vs the comp, in the officer channel; a reminder at 25 min if people are still missing.
Pull cardsPosted /assign cards re-edit themselves when the Raid-Helper comp changes (the bot reads the comp posts) or an officer reworks a row on the assignments page.
Wishlist remindersA DM to anyone with 6+ raid nights in the last 8 weeks and no wishlist β€” with the browser link, so it takes a minute.
Nightly digestIf armed with /wishadmin digest on: loot recorded, movers, top 5, new characters in the log, warnings.

Pages

Locked pages appear in the menu after Log in with Discord. Your roles in the guild's Discord server decide what opens: officers see the officer pages, the guild master also Settings (which roles count is set on the Settings page).

HomepublicThe landing page.
rules.htmlpublicThe loot system, in full.
loot-history.htmlpublicEvery award ever β€” sortable, filterable. Officers logged in get council mode (award an item live, with the claims ranked) and the import panel for histories from other addons (Gargul, ThatsMyBIS, CEPGP, DKP, spreadsheets).
wishlist.htmlguild membersThe browser wishlist editor β€” open it via your /wish web link.
assign.htmlguild membersTonight's assignments per boss, live from the next posted comp, with diagrams and the All-night tab (curses, Expose Armor, Demo Shout). Officers logged in rework any row (class-coloured menus), add optional healers, browse past weeks.
api.htmlpublicThis page.
dashboard.htmlofficers πŸ”’Live standings with per-raider receipts, the signup cross-check, and the unknown characters panel for filing new log names.
officers.htmlofficers πŸ”’Wishlists Γ— Priority, T6 token demand, review queue, chase list.
marks.htmlofficers πŸ”’Marks of the Illidari tracker β€” tick hand-outs live; your login name is recorded.
settings.htmlguildmaster πŸ”’Every setting: score weights, roster (with alts, inactive and pickup flags), resist sets, boss templates, feature switches, access rules, loot system. Rebuild and restart buttons.

HTTP API

Served by the guild's bot at https://vortexraidtool.com/g/vortex. Wishlist calls authenticate with the 1-hour token from /wish web; officer and settings calls with a Discord login session as key (an officer's, or the guild master's for settings) β€” the acting name (by) is taken from Discord. Cross-origin is allowed for this site only.

GET /api/wishlist?token=…Your list: name, lock state, items with slot / won / stackable-ring flags.
POST /api/wishlist{ token, ids: [itemId…] } β€” replaces your order. Caps: 2 copies for non-unique rings, 1 for everything else; equippables only; 423 while phase-locked.
GET /api/search?token=…&q=…Item search over the local database (Rare+, equippables).
POST /api/import{ token, text } β€” a WoWSims / Sixty Upgrades export; replaces the whole list.
GET /api/assignments[?date=…]The next comp's assignments, every boss: sections, rows, alternatives, warnings, diagrams. extra=slot,… fills optional slots (officer key needed).
GET /api/assignments/eventsServer-sent events: a version tick whenever the comp, a pin or the history changes β€” the page refreshes on it.
POST /api/assignments/pin{ key, by, date, boss, row, player | list } β€” an officer's rework of one row (swap semantics; blank = back to automatic). Posted pull cards re-edit.
GET /api/assignments/history?key=…Past weeks' assignments by date, read-only, for the officer date bar.
GET /api/marks?key=…Current lockout queue + roster + all-time totals.
POST /api/marks{ key, by, action: "given"|"undo", main } β€” tick or un-tick a hand-out; 409 on double-grants.
GET /api/council/search Β· claims Β· recentCouncil mode: item search, the ranked open claims for one item (Priority, if-won preview), the latest awards.
POST /api/council/award Β· undo{ key, by, id, player, response } records an award into the loot history (standings rebuild); undo removes one by id.
POST /api/loot/preview Β· importLoot-history import: { key, text, system } reads a pasted export (CSV / TSV / JSON) and proposes the column mapping; import adds mapping, date order and default response and files the rows next to the addon data.
GET /api/loot/imports Β· POST /api/loot/undoImports on file (with the supported loot systems and the guild default), and removal of one import.
GET /api/roster/unknown?key=…Log characters with no roster entry, with class, nights, likely owner and any matching Raid-Helper signup.
POST /api/roster/link{ key, by, name, altOf | discord + discordId | pug, class?, role? } β€” file a character as an alt, a new main or a pickup; roster validated, backed up, audited; standings rebuild.
GET/POST /api/settingsGuildmaster password: read every config file with its schema, or write one field ({ file, path, value }) or a whole file ({ file, doc }). /rebuild and /restart do what they say; /unlock hands the officer passphrase to a guildmaster login.

Data flow: Warcraft Logs (attendance Β· parses Β· consumables) + Raid-Helper (signups Β· comps) + RCLootCouncil history (read straight from the game files, or imported) rebuild everything nightly at 23:45; officer edits publish within ~a minute. Alts always roll below mains, and the council always has the last word.