Skip to content
Now live — sign in to your guild dashboard
Guild Butler
EN
Sign in Add to Discord
Killboard

Raids

Raids & signupsAttendance & stats

Economy

Loot & settlementRegearSiphoned energy

Management

Recruitment & applicationsRoles & nicknamesRoster upkeep

Extras

GiveawaysDashboard & white-labelFeatures Pricing Docs
Sign in Add to Discord

Features Raids & signups

Call the raid once. The comp fills itself.

The card updates with every click: one button per role, a bench for flex players, last week’s comp two taps from reposting, and the officer console in the raid’s own thread.

Discord
⚔️
Guild Butler ✓ APP Today at 17:04
📣 Hideout Defend (5/12 · +3 🪑)
> Bring T8. Stack up before the timer.

🕒 27/06/2026 · 20:00 · in 2 days

🧭 Gather 19:45 · 🔊 #raid-gather

⏳ 90m · 👑 Nightfall

🏛️ Taxed — shares are credited to guild balances when this settles.

⚖️ Counts ×2 for attendance — each raider earns 2 points instead of 1.

🛡️ Tier 8.1 🍖 Food Beef Stew 🧪 Potions Resistance

──────── Roster ────────

Tank
🛡️ Heavy Mace 1/2
Nightfall

Healer
💚 Holy 2/2
Mirae
Vess

DPS
⚔️ Spear / Bow 2/8
Korrin
Ilya

🪑 Bench (3) · shares the loot — Alice 🛡️💚, Bob ⚔️, Cara 🏹

🎯 Select your role
Heavy Mace Holy Spear / Bow Bench (3) Leave
Managing Log
A single-party raid card. The whole card is one embed description: the title is a Discord heading, and the date, clock and countdown are dynamic timestamps that show every viewer their own local time.
20 roles
Before the picker takes over
At or below 20 roles the card shows one button per role. Above it, one green Sign button opens a picker instead — pick a party first if the comp has sub-parties — because Discord allows only 5 buttons per row and 5 rows per message.
20 × 20
Sub-parties, and players in each
One raid call can hold up to 20 sub-parties. An in-game Albion party holds 20 players, which is the point where “add slots” spills into a new one. Real raids use about 5–7 parties.
70
Mentions in one gather ping
Discord caps a message at 100 mentions and 2000 characters. 70 stays clear of both. Individual mentions with an explicit allow-list — never @here.
225
Test files in the bot
Roster grammar, column splitting, multi-party rendering, the attendance-weight counter, roll call, voice-move planning and the call-off flow each have their own.

01 · Why it exists

A pinned message and a reaction count

Most Albion guilds call raids with a wall of text and a row of emoji reactions. It works until you need to know who is actually coming.

What that costs an officer

The comp is retyped every week. Reactions tell you that eleven people clicked 🛡️, not which of them is actually taking the tank slot. The pinned message goes stale the moment someone drops, so the officer edits it by hand, or does not, and the roster in the channel stops matching the roster in their head.

Then gather time arrives and the same officer types “everyone into Raid 1” three times, drags stragglers between voice channels one at a time, and counts heads by reading a member list.

And when six people sign for a twenty-man, there is no button that tells the roster to stand down. So people log in for a raid that is not happening, and the officer who cancelled it is the one who looks unreliable.

Every part of this page exists because one of those steps was being done by hand.

Discord

Only you can see this

📣 Raid builder — fill what you need, then post:
• Title:
• Template: —
• Mode: 🏛️ Taxed (by role)
• Attendance weight: ×1
• Date: —
• Gather: —
• Start: —
• Duration: —
• Requirements: —
• Description: —
• Ratings: off
• Ping: —
• Build link: —
• Image: —
• Gather VC: —
Select a template…
Load a preset…
Basics Roles Requirements Media Ping
Mode: guild (by role) Gather VC Ratings: off
Save preset Post raid
The builder, before anything is filled in. Blue means that step has content, so the panel is also the checklist. It is ephemeral — several officers can build raids in the same channel without seeing each other’s drafts.

02 · Posting a raid

From /raid to form-up

Eight steps, and only the first three need an officer to think. The rest is the raid running itself.

  1. Open the builder officer

    /raid opens the raid builder as an ephemeral panel only you can see. Row one builds the raid — 📝 Basics · 🧩 Roles · ⚙️ Requirements · 📎 Media · 🔔 Ping. Row two holds the options — the mode toggle (🏛️ Mode: guild (by role), or 🎲 Mode: casual once you flip it), 🔊 Gather VC and ⭐ Ratings. Row three commits — 💾 Save preset · 📣 Post raid. Every filled field turns its own button blue, so the panel doubles as a checklist. Because it is ephemeral, several officers can be building raids in the same channel and nobody sees anyone else’s work in progress.

  2. Pick a comp, or type one officer

    The template picker starts empty — Discord shows the placeholder rather than pre-selecting a comp for you. Pick a saved template, load a preset (a whole saved call: comp, mode, times, requirements, ping roles), or pick “Example — all role formats” and open 🧩 Roles: the box prefills a working comp that demonstrates every part of the grammar and can be posted as-is. Post without picking anything and the raid gets a small placeholder roster — Tank, Healer, DPS ×3 — to fill in.

  3. Set the time once, in your guild’s timezone officer

    Times are typed in server-local time and stored as a UTC instant. The card renders Discord dynamic timestamps, so a Brazilian and a German in the same guild each see their own clock with no conversion table in the channel. In the full builder, 📝 Basics is one modal holding Title, Date (DD-MM, tomorrow, +1), Gather time (HH:MM), Start time (HH:MM) and Duration in minutes. The quick one-modal path instead takes a single forgiving Time field: 20:30 (today, or tomorrow if that time already passed), today 20:30, tomorrow 20:30, 22-06 20:30, 22.06.2026 20:30, or empty for time TBD.

  4. Post it, and players seat themselves member

    The raid posts as one card. At or below 20 roles the card carries one button per role; above that it shows a single green ✍️ Sign / change role button that opens a picker. Clicking a role seats you; clicking the same role again leaves. A full role stays clickable — greyed, not disabled — so its occupant can always get out, and every card also carries an explicit 🚪 Leave. Nobody’s slot is decided by counting reactions.

  5. Take the bench if you have no fixed role member

    🪑 Bench puts you in the flex pool with no role: you are on the roster and you get the gather ping, but you are not holding a slot. The bench line on the card shows the roles each bencher can play, pulled from their /profile — tank, healer, support, melee, ranged, battlemount, caller. An officer who sees three healers on the bench can seat one with 👮 Assign in a click, and a bencher who picks a role for themselves is converted to a confirmed signup automatically.

  6. Run the call from the thread officer

    🛠️ Managing on the post opens a public thread anchored to the raid card and drops the officer console into it — 🧩 Roles · 👮 Assign · 🔊 Roll call · 📜 Activity log, then ✏️ Edit · 🔊 Voice · 🛠️ Manage player · 🔔 Live feed · 🎁 Raffle, then 💰 Settle · 📸 Regear board · 🛑 End · no split · 📣 Call it off. The post sits at the top of the thread, so the live roster and the controls are on screen together. The console body carries a live fill line — each sub-party’s own count, then the bench: Vanguard 3/6 · Backline 4/10 · 🪑 2.

  7. Gather: ping, roll call, move bot

    At the raid’s gather time the bot pings the roster — role players under Gather:, bench players under Standby (bench):, each mentioned individually, never @here. Turn it on with /config gather_ping:true. 🔊 Roll call then compares the confirmed roster against who is actually sitting in the gather voice channel and buckets everyone: Present, Missing, In VC not signed up, and Bench present. 🔊 Voice → 🧲 Pull in drags the missing who are in some other channel; ⚔️ Split to parties puts each player in their own sub-party’s channel.

  8. Finish it honestly officer

    Three different endings, because they mean three different things. 💰 Settle splits the loot. 🛑 End · no split says the raid ran and there was no loot — quiet, no economics, still settleable if loot turns up late. 📣 Call it off says the raid never ran: everyone signed up is told to stand down in the raid channel with the caller’s reason quoted, settling is blocked until the raid is reopened, and the gather ping is cancelled in the same database statement so nobody gets “gather now!” seconds later.

03 · The raid card

The whole call on one card

When, where, who is leading, whether you get paid, what gear to bring, and which slots are still open — without scrolling past it into chat.

Read it top to bottom

The title line carries the live fill count and the bench count: (5/12 · +3 🪑). It updates on every click, so the headline number is never a guess.

Time is a Discord dynamic timestamp — date, clock, and a countdown that keeps ticking. Gather gets its own line one size smaller, with the clickable gather voice channel next to it, because "where do I go" and "when" are the same question.

Taxed or untaxed is stated in the member’s own terms, on its own line. Before that line existed, a member could sign up with no way to tell whether they would be paid through the bot at all.

⚖️ Counts ×N only appears above ×1, because a line every raid carries is a line nobody reads. It prints the raw stored weight, not a rounded one, because settle pays exactly what is stored.

The bench line shows each bencher’s playable roles as emoji from their profile, and states what a bench seat is worth when the guild pays it.

Discord
⚔️
Guild Butler ✓ APP Today at 16:12
📣 Gank squad — Roads (5/12)
🕒 27/06/2026 · 20:00 · in 4 hours

⏳ 60m · 👑 Nightfall

🎲 Untaxed — split by hand in game. Nothing is credited or tracked.

──────── Roster ────────

Tank
🛡️ Heavy Mace (1/2) — Nightfall

Healer
💚 Holy (2/2) — Mirae, Vess

DPS
⚔️ Spear / Bow (2/8) — Korrin, Ilya

🎯 Select your role
Heavy Mace Holy Spear / Bow Bench Leave
Managing Log
The same roster with 📋 Roster: compact. Each role becomes one line with its occupants inline — the layout for a comp too big to scroll. It is an independent switch from columns, and one click on the console changes it on a live raid.
Card stateColourFooter
Open Blurple None — the raid is live and taking signups.
Settled (taxed or pool) Green ✅ Settled
Settled (casual) Grey ✅ Split posted — paid by hand, nothing credited. Deliberately not the payout green: a casual settle credited nobody, and the card must agree with the split notice sitting next to it.
End · no split Amber 🔒 Closed — no loot split
Auto-closed Amber ⏳ Auto-closed — not settled — a stale raid, still reopenable and settleable.
Called off Amber 📣 Called off — this raid did not run, with the caller’s reason quoted and attributed at the top of the card.

04 · Writing a comp

A comp is text — paste it, share it, save it

Nine lines describe a two-party, nine-slot comp with categories, emoji, weapon-choice names and a column layout. You never have to write any of it — and if you do, an edit hands you back exactly what you typed.

Why > and not /

The category separator had to be something Albion role names never contain. Names use / constantly for weapon choices — Heavy Mace / Hammer, Spear / Bow — so / was never available. > is.

| is rejected outright in names, categories and party labels, because it is the separator inside a Discord component id and a role carrying one would break its own button.

Repeating a line repeats a seat

Gala, Gala, Gala gives three separate one-slot seats rendered Gala #1 / #2 / #3. Gala:3 gives one three-slot line. That is on purpose: a fixed comp should read exactly as it was typed, and in a fixed Albion comp the three Galas are three specific jobs.

Discord

Only you can see this

Roles
columns: 2
density: compact
# Party 1
Tank > Heavy Mace:2:🛡️
Healer > Holy Staff:2:💚
DPS
# Party 2
Ranged > Spear / Bow:3:🏹
Support:1
Edit roles Roster: compact Columns: 2 Attendance: ×1 Save & back
The text box behind ✏️ Edit roles, prefilled with the built-in "Example — all role formats" template, and the 🧩 Roles panel’s own button row beneath it. The example is not a tutorial you read elsewhere — it is a valid comp you can post as it stands. 🔢 Columns is greyed here because the comp has # Party headers.
You typeWhat it produces
columns: 2 Lay a single-party roster across 2 side-by-side columns (1–3). Inert in this example — the comp has # Party headers, and sub-parties are already the columns.
density: compact Each role renders as **⚔️ DPS (2/3)** — Alice, Bob on one line, instead of a header with names listed beneath it.
# Party 1 Opens a sub-party. Every role below belongs to it until the next #.
Tank > Heavy Mace:2:🛡️ Category Tank, role Heavy Mace, 2 slots, 🛡️ emoji.
DPS A bare name — one slot, no category.
Ranged > Spear / Bow:3:🏹 The / stays inside the name. That is the whole reason > is the category separator.
Support:1 An explicit one-slot role.
Limits 40 characters per role name, 50 slots per role, 20 sub-parties per raid, unique party labels.
Discord
⚔️
Guild Butler ✓ APP Today at 17:04
📣 CTA — Hideout Defend (7/16 · +2 🪑)
🕒 27/06/2026 · 20:00 · in 2 days

🧭 Gather 19:45 · 🔊 #raid-gather

⏳ 120m · 👑 Nightfall

🏛️ Taxed — shares are credited to guild balances when this settles.
▎ ⚔️ Vanguard (3/6)
Tank
Heavy Mace 1/2
Nightfall

Hammer 0/2

Healer
Holy 2/2
Mirae
Vess
▎ 🏹 Backline (4/10)
Ranged
Spear / Bow 3/8
Korrin
Ilya
Sanya

Support
Locus 1/2
Tam
🪑 Bench (2) · shares the loot — Alice 🛡️💚, Bob ⚔️
🔗 Build
Vanguard loadouts
🎯 Select your role
The same raid authored with # Party headers. Each sub-party is one inline embed field, so they sit side by side in a single card, with the shared bench and the build link as full-width rows below. Inside a field value a ### heading renders literally, so role labels fall back to bold and category headings to bold and underlined.

The counts are computed, not stored

Each column header shows the confirmed players and the summed slots of the roles actually listed in that column. Vanguard here is 2 + 2 + 2 slots with three occupants, so it reads (3/6). Nothing about the header can drift from the roster under it.

Columns without sub-parties

columns: N gives a single-party roster the same side-by-side look without splitting it into parties — so signup keeps its one-click role buttons and gains no pick-a-party step.

The split has two modes, chosen automatically. If you tagged at least as many categories as you asked for columns, each category is kept whole and dropped into the currently shortest column, ties going left. So categories equal to columns means one category per column, in order.

With fewer categories than columns, the flat list is split into balanced contiguous chunks: five roles over two columns become 3 and 2; six roles over three columns become 2, 2 and 2. Empty trailing columns are dropped, so asking for three columns with only enough roles for two renders two.

The cap is three. It used to be four, with a note beside it admitting that Discord fits only three inline fields across on desktop and a fourth wrapped to a second row. Stored fours now clamp to three on read, so no raid lost anything.

05 · Signing up

One click at five roles. One click at sixty.

Discord allows five buttons per row and five rows per message. A 60-slot CTA physically cannot have a button per role, so above 20 roles the card changes shape rather than cutting roles off.

Small comp: a button per role

Roles fill up to four rows of five. Then 🪑 Bench, 🚪 Leave, 🛠️ Managing and 📜 Log tuck onto the last role row if there is space, and start a new row if not.

A full role goes grey but stays clickable. Disabling it would trap the only occupant of a one-slot role with no way out; a non-occupant who taps it just gets told it is full.

On a multi-party raid each button is suffixed with its sub-party (🛡️ Heavy Mace · Vanguard), so two parties that both run a Heavy Mace are never ambiguous.

Big comp: one green button

Above 20 roles the card shows a single ✍️ Sign / change role in green — Discord’s success style — because on a card with no per-role buttons it has to be obvious which button is the way in. It opens a private picker: choose your party, then your role. On a single-party comp with more than 25 roles you choose a category first, because a Discord select menu holds 25 options.

The last slot

Capacity is re-checked inside a database transaction at the moment of the click, and counted against the specific role row rather than the role name. Two people racing for the last Holy slot get one seat and one honest Holy just filled up — try another role.

Discord
⚔️
Guild Butler ✓ APP Today at 17:04
📣 CTA — Hideout Defend (34/60 · +5 🪑)
🕒 27/06/2026 · 20:00 · in 2 days

🧭 Gather 19:45 · 🔊 #raid-gather

🏛️ Taxed — shares are credited to guild balances when this settles.
▎ ⚔️ Vanguard (18/20)
Tank
Heavy Mace 2/2
Nightfall
Rukavytsia

Hammer 1/2
Zoria
▎ 🏹 Backline (11/20)
Ranged
Spear / Bow 6/8
Korrin
Ilya
Sanya
▎ 🛡️ Rearguard (5/20)
Healer
Holy 3/4
Mirae
Vess
Nadiya
🪑 Bench (5) · shares the loot — Alice 🛡️💚, Bob ⚔️, Cara 🏹, Tam 🔮, Vidun 🐎
🎯 Select your role
Sign / change role Leave Bench (5) Managing Log
A comp over 20 roles: no per-role buttons, one green call to action, and the picker behind it. The three party columns are abbreviated here — on the real card each lists every role in full.
Discord

Only you can see this

Which party do you want to join?
Choose a party…
Category Vanguard — pick your role:
Role…
Options read 🛡️ Heavy Mace (1/2), 💚 Holy (2/2) — FULL, ⚔️ Hammer (0/2)
What the green button opens: pick a party, and the same private panel is edited in place to show that party’s roles. Both steps shown together here. Each option carries its own fill count and a FULL marker.

06 · The officer console

The buttons live under the raid post, not at the bottom of the channel

An ephemeral panel sits wherever you last clicked, while the raid card drifts upward with every message. For a 60-person CTA that is a lot of scrolling to compare a roster against its own buttons.

Discord
⚔️
Guild Butler ✓ APP Today at 17:06
🛠️ Officer console — CTA — Hideout Defend
📋 Vanguard 3/6 · Backline 4/10 · 🪑 2
Controls are officer-only. The raid post is at the top of this thread.
Roles Assign Roll call Activity log
Edit Voice Manage player Live feed: off Raffle
Settle Regear board End · no split Call it off
The console, posted inside the public thread that 🛠️ Managing opens on the raid post. The card sits at the top of that thread; these buttons sit under it. Members see the row and cannot use it — every handler re-checks permission on click.

Why a public thread

A private thread on Discord cannot be attached to a message, and therefore cannot show the raid card above it — which was the entire point of moving the console into a thread. So the thread is public, it doubles as the raid’s discussion thread, and authority is enforced on every click rather than by hiding buttons.

Press 🛠️ Managing a second time and you get a deep link straight to the console message, not just the thread, so forty messages of chat cannot bury the controls. If the bot cannot create a thread at all, it falls back to the old ephemeral panel rather than failing the click.

Three rows, three jobs

Row one is the roster. Row two is running the call — and 🎁 Raffle lives there rather than with the red buttons, because a mid-raid prize draw is not a terminal action. Row three is finishing, kept purely terminal so you never travel through it to reach something harmless.

🔊 Roll call only appears once the raid has a gather voice channel. A non-officer caller gets the same console minus the economics: no taxes, no exemptions, and Settle only on their own casual raid.

07 · Gather and voice

Ping the exact roster, then find out who actually showed up

Two problems that look like one: telling the right people it is time, and knowing which of them are in the channel.

Never @here

@here pings people who happen to be online and can see the channel. That misses every offline player who signed up, and pings everyone who did not. The bot mentions each signed-up player individually with an explicit allow-list, splitting role players from the bench so the two get different instructions.

The sweep runs every 60 seconds and fires at most once per raid: the raid is claimed in the database before the message is sent, so two overlapping ticks cannot double-ping. A raid whose gather time passed more than five minutes ago while the bot was down is skipped rather than fired late.

/config gather_move:true adds the other half: at that same moment, every signup already sitting in some voice channel is pulled into the gather VC. Discord has no way to drag someone into voice who is not in it — that is what the ping is for — and a failed move never suppresses the ping.

Roll call is not a check-in

There is no "I’m here" button. Presence is read from Discord’s own voice state, so the report is simply true, and the two buttons under it divide the missing list between them: 🧲 Pull in for the ones sitting in some other channel, 📣 Ping missing for the ones who are not in voice at all.

Discord
⚔️
Guild Butler ✓ APP Today at 19:45
📣 CTA · Hideout Defend — gather now!
Gather: @Nightfall @Mirae @Vess @Korrin @Ilya @Sanya @Tam
Standby (bench): @Alice @Bob
The gather ping, posted into the raid’s officer thread if it has one, otherwise into the raid channel.
Discord

Only you can see this

🔊 Roll call · CTA — Hideout Defend
Gather VC: #raid-gather — 9 connected
✅ Present · 6/9
@Nightfall @Mirae @Vess @Korrin @Ilya @Sanya
⚠️ Missing — signed up, not in VC · 3
@Tam @Rukavytsia @Kolyada
❓ In VC, not signed up · 2
@Zoria @Vidun
🪑 Bench, present · 1
@Alice
Refresh Ping missing Pull in
Roll call: the confirmed roster against who is actually in the gather channel. 🧲 Pull in and 📣 Ping missing are both disabled when nobody is missing.
Discord

Only you can see this

🔊 Voice — CTA — Hideout Defend
Gather: #raid-gather — 9 here
Vanguard → #raid-1 · Backline → #raid-2 · Rearguard → not set
Pull in Split to parties Regroup Clear strays
Map channels Undo move
The 🔊 Voice panel. Every button is disabled with a reason rather than hidden — a party with no mapped channel simply reads 'not set' and stays put on ⚔️ Split.

Split is the one a generic move bot cannot do

A move bot can drag everyone from A to B. It cannot put each player into their own party’s channel, because it does not know the roster. This one does, so ⚔️ Split to parties is a single click.

Every destination is permission-checked before anybody moves — the bot’s Move Members grant, then each target channel for existence, type, and the bot’s own View and Connect. Discord requires the mover to be able to join a channel to put someone else in it. If one channel fails, you are told which, instead of finding half a raid stranded across two rooms.

Moves run five at a time; firing forty at once only buys rate-limit backoff. The result is reported honestly — moved, failed, already there, and not in voice at all, which is the "ping them instead" bucket.

↩️ Undo move covers the last batch anywhere in the guild for ten minutes, so an accident from the roll-call report, the voice panel or /vcmove has the same one button. It lives in memory only, and a restart loses it, deliberately.

08 · Ending a raid

No loot and no raid are not the same event

Most bots give you one close button, so a cancelled raid gets filed as a finished one — and people log in for a raid that is not happening.

🛑 End · no split

The raid ran, there was simply no loot. Sign-ups close, the card goes amber with 🔒 Closed — no loot split, nothing moves, nobody is notified — and it stays settleable, because loot sometimes turns up an hour later.

📣 Call it off

The raid never happened. Everyone signed up is told to stand down in the raid channel, with your reason quoted and attributed to you. The gather ping is cancelled in the same database statement that closes the raid, so it cannot fire seconds after you cancelled. Settling is blocked until you reopen.

The reason is collapsed to a single line before it is quoted. A > quote only covers the line it starts on, so a multi-line reason would break out of the quote and render as the bot’s own voice — and a line like "✅ Settled — 3,000,000 credited" reads as real.

♻️ Reopen, loudly

The original stand-down notice is struck through in place with mentions suppressed, and a fresh ✅ BACK ON is posted. Both, because nobody re-reads an edited message — a silent correction to something that pinged forty people is not a correction.

You are always told what actually happened: "14 signed-up players were told to stand down", or "nobody was signed up, so there was no one to notify", or "I could not post the stand-down notice in the raid channel — tell the roster yourself".

Discord
⚔️
Guild Butler ✓ APP Today at 19:31
📣 CALLED OFF — CTA · Hideout Defend
This raid is not happening. Stand down — no need to wait in the gather channel.
> 📣 @Nightfall: only 7 of 20 signed, enemy has a ball up
@Nightfall @Mirae @Vess @Korrin @Ilya @Sanya @Tam @Alice @Bob
The stand-down notice, posted to the raid channel and never to the officer thread — a cancelled raid should not be pulling people into a discussion.
Discord
⚔️
Guild Butler ✓ APP Today at 17:04
📣 CTA — Hideout Defend (7/20 · +2 🪑)
🕒 27/06/2026 · 20:00 · 2 days ago

📣 Called off — this raid did not run.

> 📣 @Nightfall: only 7 of 20 signed, enemy has a ball up

⏳ 120m · 👑 Nightfall

🏛️ Taxed — shares are credited to guild balances when this settles.
Reopen
The card itself after a call-off — header only here, the roster below it is unchanged. The verdict is the bot’s own line; the reason is a separate quoted, attributed line — the same treatment the ping uses, so neither surface is safer than the other. Every join button is gone; ♻️ Reopen is all that is left.

09 · Everything else

Everything else it does

Two ways to build a raid

The deep builder for a taxed CTA, one quick modal for a thirty-second gank call.

The full builder lays every field on its own button, grouped by purpose: 📝 Basics (title, date, gather, start and duration in one modal), 🧩 Roles, ⚙️ Requirements, 📎 Media, 🔔 Ping, then the mode toggle · 🔊 Gather VC · ⭐ Ratings, then 💾 Save preset · 📣 Post raid. That depth is right for a taxed CTA and wrong for a thirty-second gank call, so a raid-board button configured as a simple content profile skips straight to one modal — Title, Time, Description, Roles — and replies with a compact card carrying ✏️ Main · 🔔 Ping · 💾 Save preset · 📣 Post raid. Whichever door you use, the draft is the same object.

Templates and presets

A template saves the comp. A preset saves the whole call — comp, mode, times, requirements, ping roles.

Templates are the reusable composition, public (officer-managed) or personal (anyone). They live on a template board anyone can browse and launch. Presets go further: a preset is the entire raid config, so a recurring Wednesday CTA goes up in two taps. Presets sit on their own board, names are unique per guild, and a preset stores a relative lead time rather than a calendar date — a “tomorrow” preset always loads as tomorrow, not as the day it was saved. Comps are snapshotted onto the preset when it is saved, so editing or deleting the source template later cannot silently swap a preset onto the wrong roster.

The comp grammar

Category > Name:slots:emoji, one per line. Paste a whole comp at once.

A comp is something you can write, paste, share and diff. Name is one slot; Name:5 is five; Name:5:⚔️ adds an emoji; Category > Name tags a role with a category that renders as a sub-header on the card. The separator is > and not / on purpose — Albion role names use / constantly for weapon choices (Heavy Mace / Hammer), and that had to stay free. Parsing is what-you-see: three Gala lines stay three separate one-slot seats and render Gala #1 / #2 / #3, because a fixed comp should read exactly as typed. Role names cap at 40 characters and 50 slots, and | is rejected in names, categories and party labels because it separates the fields inside a Discord component id.

Multi-party rosters

One raid call, several in-game parties, rendered as side-by-side columns in a single card.

A line starting with # opens a sub-party; every role under it belongs to that party until the next #. The card renders one column per sub-party inside a single embed, each with its own fill count, pinned to full desktop width by an invisible spacer image when there is no cover image. Up to 20 sub-parties, labels must be unique. This is deliberately a presentation and structure layer on top of one raid row — settlement still pools per raid, which is what kept the append-only loot ledger untouched.

Layout and weight, without retyping the comp

🧩 Roles holds ✏️ Edit roles in the builder, ➕ Add role / ➕ Add slots on a posted raid, and the layout counters on both.

columns: and density: started as typed directives and grew one-click counters. 🔢 Columns cycles 1 → 2 → 3 and lays a single-party roster across side-by-side columns without turning it into sub-parties, so signup keeps its one-click role buttons and gains no pick-a-party step. 📋 Roster flips between full (role header, players listed beneath) and compact (**⚔️ DPS (2/3)** — Alice, Bob), which fits a big comp on one screen. ⚖️ Attendance cycles ×1 to ×5. Each button shows the value actually in effect, including one inherited from a template, so one click always changes what the preview shows. Changing them on a live raid re-renders the card and touches nobody’s signup.

Five roles or sixty — still one click

Per-role buttons at or below 20 roles; one green Sign button and a picker above that.

Discord allows five buttons per row and five rows per message, so a 60-slot CTA physically cannot have a button per role. At or below 20 roles the card shows one blurple button per role, labelled with its emoji, its name and — on a multi-party raid — its sub-party (🛡️ Heavy Mace · Vanguard), so identical role names across parties stay distinguishable. Above 20 the card shows one green ✍️ Sign / change role button that opens a picker: pick a party, then a role. On a single-party comp over 25 roles you pick a category first, because a Discord select menu holds 25 options.

Bench and flex pool

🪑 Bench puts you on the roster with no role — pinged, counted, one click from a slot.

Not everyone wants to commit to a slot, and an officer building a comp needs to know who is around. The bench is a first-class roster state: benched players appear on the card with a count, get the gather ping as standby, show up in roll call as “Bench, present”, and can be seated into a role in one click by an officer — or by themselves, since picking a role converts a bench entry into a confirmed signup. What a bench seat is worth is a per-guild policy — nothing, a full share of the loot, attendance points, or both — frozen onto the raid when it is created, so a policy change tomorrow cannot rewrite what today’s raid promised.

Player profiles

/profile records which roles you can play; the bench shows them as emoji.

A member toggles their playable roles once — tank 🛡️, healer 💚, support 🔮, melee ⚔️, ranged 🏹, battlemount 🐎, caller 📣 — and the profile is global, not per-raid. Its payoff is the bench line: 🪑 Bench (3) — Alice 🛡️💚, Bob ⚔️, Cara 🏹. An officer short one healer can see who on the bench can heal without asking in voice. Officers can view or edit a member’s profile with /profile user:@name; anyone else viewing it gets a read-only panel.

No timezone math

Type the time once in guild time; every member sees their own clock automatically.

The guild sets one timezone. Raid times are entered in that local time, converted correctly across daylight-saving boundaries, and stored as a UTC instant. The card then renders Discord’s own dynamic timestamps, which each client localises: the raid line shows date, clock and a live countdown, and gather time gets its own line with the clickable gather voice channel beside it. Nobody has to post “20:30 CEST (18:30 UTC)” in the channel again, and the countdown keeps ticking on a card that was posted three days ago.

Edit a posted raid without losing signups

Rename, reorder or re-slot the comp; players keep their seats, and you are told if anyone was benched.

✏️ Edit reopens the builder prefilled with the live raid, roster included — the sub-party grammar is reconstructed so a multi-party comp round-trips as text. On save the roster is rebuilt and every confirmed signup is re-matched by identity (sub-party, role name, and which occurrence of a repeated role it was), with sub-parties matched by label first and by role content second, so renaming “Party 2” to “Flank” or reordering the columns keeps people seated. Each sub-party’s mapped voice channel rides across on the same match. Anyone whose role genuinely no longer exists is moved to the bench and never dropped, and the save reply tells you how many. Applying a whole template to a raid that already has signups asks for confirmation first, naming how many people are affected.

Grow a live roster mid-call

➕ Add role and ➕ Add slots extend a running raid without disturbing a single seat.

More people turned up than the comp has slots. The console’s 🧩 Roles panel adds one named role — name, slots, emoji, category, and on a multi-party raid which sub-party it joins — then optionally seats members into it straight away. ➕ Add slots adds 1, 2, 3, 5 or 10 open slots and is roster-aware: it tops off parties with room, then spills into a new sub-party once a party reaches Albion’s 20, converting a single-party raid into Party 1 + Party 2 automatically. You see a preview of exactly where the slots land before confirming. The guarantee that makes this safe is structural: these operations only insert rows or re-parent a role, so they can never bench a confirmed player.

Officer console in a thread

The controls live in a thread anchored to the raid post, so the card and the buttons are on screen together.

An ephemeral panel sits at the bottom of the channel while the raid post drifts upward with every signup — for a 60-person CTA that is a genuinely painful amount of scrolling. 🛠️ Managing opens a public thread on the post and puts the console in it as a persistent message, so the raid card sits at the top of the thread and the buttons sit under it. The thread doubles as the raid’s discussion thread, the settlement breakdown posts there, and on settle it is archived and stamped ✅ (reopenable, not locked). Pressing 🛠️ Managing again returns a deep link straight to the console message, so member chatter cannot bury the controls. If the bot cannot create a thread, it falls back to the old ephemeral panel rather than failing.

Gather auto-ping and auto-move

At gather time the bot pings the exact roster, and can pull them into the voice channel.

A sweep runs every 60 seconds, finds raids whose gather time has arrived, and posts one message into the raid’s officer thread if it has one, otherwise into the raid channel, mentioning each signup individually. Never @here: that pings online people who did not sign up and misses offline people who did, which is the opposite of what is wanted. Turn it on with /config gather_ping:true. /config gather_move:true adds the other half — at that same moment every signup already sitting in some voice channel is pulled into the gather VC. A failed move never suppresses the ping, because being told is the point and being dragged is the courtesy.

Roll call and bulk voice moves

Who is missing, read from Discord voice state — then 🧲 Pull in, ⚔️ Split to parties, 🔙 Regroup, ↩️ Undo.

Roll call compares the confirmed roster against who is actually in the gather voice channel and returns four buckets: ✅ Present, ⚠️ Missing (signed up, not in VC), ❓ In VC not signed up, and 🪑 Bench present. There is no “I’m here” button for players to press — presence is read from voice state, so the report is simply true. The report’s own buttons divide the missing list: 🧲 Pull in for whoever is in voice somewhere, 📣 Ping missing for whoever is not. The 🔊 Voice panel adds ⚔️ Split to parties, 🔙 Regroup, 🧹 Clear strays and ↩️ Undo move. Every destination is permission-checked before a single person moves, so you are told which channel is the problem instead of finding half a raid stranded across two rooms.

Ending a raid three honest ways

💰 Settle, 🛑 End · no split, or 📣 Call it off — and ♻️ Reopen retracts loudly.

These are not the same event and the bot refuses to pretend they are. 🛑 End · no split means the raid ran and there was no loot: sign-ups close, the card goes amber with “🔒 Closed — no loot split”, nothing moves, nobody is notified, and it stays settleable in case loot arrives late. 📣 Call it off means the raid never ran: the card says “📣 Called off — this raid did not run” with the caller’s reason quoted and attributed, everyone signed up is told to stand down in the raid channel, the gather ping is cancelled atomically so it cannot fire seconds later, and settling is blocked until you reopen. Reopen is deliberately loud — the original notice is struck through in place with mentions suppressed and a fresh ✅ BACK ON is posted, because nobody re-reads an edited message.

A public activity log anyone can read

📜 Log on the card shows who signed, switched and left — ungated.

Every signup, switch, bench and leave is captured, and the 📜 Log button on the public post opens that history to any member, not just officers. The console carries the same log plus a 🔔 Live feed toggle that mirrors changes into the thread as they happen. When a non-officer caller uses one of their delegated powers — benching, kicking, handing over the lead — an audit line is posted into the raid thread with mentions suppressed, so officers keep passive visibility without being pinged.

Members can call raids too

A non-officer’s raid is locked to casual, and they run their own call.

Members can post raids. Their calls are locked to casual — the mode toggle is hidden in the builder and enforced again when the raid publishes, so a member cannot post a taxed, tracked raid. Whoever posts a raid is its caller, and a non-officer caller gets a console of their own: bench and kick, assign roles, edit, roll call, voice moves, grow the roster, hand over the lead, end it, call it off, and settle it because a casual split moves no balances. What a caller can never do is settle a taxed raid or touch taxes, membership or exemptions.

10 · Commands

Buttons first, commands if you want them

Officers who prefer commands have them, but a guild can run raids for a year having typed only /raid — and members never have to type anything at all.

/raid/raidboard post/raidboard settings/template create/template board/template manage/template mine/template list/template edit/template delete/preset board/preset list/preset manage/preset delete/assign/manage/profile/menu/settings/config gather_ping/config gather_move/config vc_lobby/vcmove all/vcmove undo

11 · What it cannot do

The limits, stated plainly

Several of these are choices rather than gaps, and the reasoning is included so you can disagree with it.

12 · Questions

Questions officers actually ask

If I edit a posted raid, do people lose their spots?
Almost never, and you are always told. On save the roster is rebuilt and every confirmed signup is re-matched by identity — sub-party, role name, and which occurrence of a repeated role it was — with sub-parties matched by label first and by role content second. So renaming “Party 2” to “Flank”, reordering the columns, or adding a role keeps everyone seated, and each sub-party’s mapped voice channel comes along on the same match. Someone whose role genuinely no longer exists is moved to the bench, never dropped, and the save reply says how many. If you are only growing the roster, use the console’s 🧩 Roles → ➕ Add role / ➕ Add slots instead: those only insert rows, so they cannot bench anyone at all.
Can members create raids, or is it officers only?
Members can post raids. Their calls are locked to casual (untaxed) — the mode toggle is hidden and enforced again when the raid publishes, so a member cannot post a taxed, tracked raid. Whoever posts a raid is its caller, and a non-officer caller runs their own call: bench and kick, assign roles, edit, roll call, voice moves, grow the roster, hand over the lead, end it, call it off, and settle it if it is casual. What a caller can never do is settle a taxed raid or touch taxes, membership or exemptions. That boundary is also why editing keeps a non-officer locked to casual: if a caller could flip their own raid to casual, they could then settle it themselves.
Can members see the officer buttons in the thread?
They see them and cannot use them. The console lives in a public thread anchored to the raid post, because a private thread on Discord cannot be attached to a message and therefore cannot show the raid card — which was the whole point. So anyone who can see the raid channel can read the console; every handler re-checks permission on click, and each sub-flow replies only to the person who pressed it. Treat it as a visible control surface, not a private one.
Do I have to learn the text grammar?
No. Pick a template or a preset and you never type a role. If you want to write a comp, pick “Example — all role formats” in the template picker and open 🧩 Roles — the box prefills a working example of every feature, and it is a valid comp you can post as-is. The two layout directives (columns: and density:) also exist as one-click buttons in the same panel, so the text form is only there for people who prefer authoring a whole comp as text, and for templates.
Does the gather ping use @here?
No, and deliberately so. @here pings people who are online and can see the channel — which misses your offline signups and pings people who never signed up. The bot mentions each signed-up player individually, with an explicit allow-list, split into a Gather: line for role players and a Standby (bench): line for the bench. It fires at most once per raid, and only if the raid has a gather time set and the server has turned it on with /config gather_ping:true. There is no per-member opt-out — the toggle is server-wide.
What is the difference between “End · no split” and “Call it off”?
One says there was no loot; the other says there was no raid. 🛑 End · no split closes a raid that ran: sign-ups stop, nothing moves, nobody is notified, and it stays settleable in case loot arrives late. 📣 Call it off says the raid never happened: the card says so, everyone signed up is told to stand down in the raid channel with your reason quoted, the gather ping is cancelled in the same database statement so it cannot fire seconds later, and settling is blocked until you reopen. Both are reversible with ♻️ Reopen — but reopening a called-off raid pings the roster again with ✅ BACK ON, because a silent correction to a message that pinged forty people is not a correction.
Do I need a second bot to move people between voice channels?
No. The 🔊 Voice panel does 🧲 Pull in (roster and bench, from anywhere on the server, into the gather channel), ⚔️ Split to parties (each player into their own sub-party’s channel), 🔙 Regroup, 🧹 Clear strays and ↩️ Undo move. Split is the one a generic move bot cannot do, because it does not know which party you are seated in. You map each sub-party to an existing voice channel once with 🔧 Map channels, and the mapping survives renames and reorders of the comp. The bot needs the Move Members permission, which nothing else in it uses — most servers will have to grant it once.
What happens if two people click the last slot at the same time?
One gets it and the other is told the truth. Capacity is re-checked inside a database transaction at the moment of the click, counted against the specific role row rather than the role name — so two roles that happen to share a name in different sub-parties count independently. The loser sees “Holy just filled up — try another role” rather than a silent no-op or a double-booked slot.
Can I reuse last week’s call without retyping it?
Yes, two ways. A template saves the composition only, and can be public (officers manage it) or personal. A preset saves the entire call — comp, mode, times, requirements, ping roles, ratings — and appears as a “Load a preset…” dropdown in the builder plus its own board. A preset stores a relative lead time rather than a fixed date, so a preset saved for “tomorrow” always loads as tomorrow. Its comp is snapshotted at save time, so later edits to the source template cannot silently change what the preset posts.

See it running before you install

The community server runs the bot in the open — a live killboard, real boards to press, and humans who answer questions.

Watch it live

Stop counting reactions

One card, one click per player, and an officer console that lives next to the roster. Free to add.