Setup Guide

Everything you need to get LW Alliance Helper running in your server, from inviting the bot to configuring each individual feature. New here? Start at Before You Start and work down — or jump to a specific feature setup if you've already done the basics.


Before You Start

You'll need:

That's it. No coding, no Google Cloud setup — just a sheet and a Discord server.


Inviting the Bot

Use the provided button to invite the bot to your server. When prompted, select your server from the dropdown and click Authorise.

Once the bot has joined, you'll see it appear in your member list. It won't do anything until you run /setup.

Invite to Server


Setting Up Your Google Sheet

Before running /setup, create a new Google Sheet. You don't need to add any tabs or columns yet — the bot will tell you what to create as you go through each feature's setup.

The one thing you need to do upfront is share your sheet with the bot's service account so it can read and write data. You'll be prompted to do this during /setup with a direct link to your sheet's sharing settings and the exact email address to use.

Set the permission to Editor when sharing.

🗂️ Your Sheet is where your alliance's data lives. Every piece of alliance data — power scores, growth snapshots, train history, participation logs, member roster — is written to your Sheet, on your Google account. The bot doesn't keep its own copy. If you ever stop using the bot, revoke the service-account share and you keep everything. See Where Your Data Lives for details.

Keep your Sheet ID handy. You can find it in your sheet's URL: https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID_HERE/edit


Core Setup

Run /setup in your leadership channel to get started. This covers the essentials that every feature depends on.

What it asks for:

  1. Member role — the role all alliance members have. Used to gate the survey.
  2. Leadership role — the elevated role for alliance leadership. Required to use most commands.
  3. Leadership channel — the private channel where commands are used and drafts appear.
  4. Timezone — your alliance's local timezone. Used for all event times, reminders, and Desert Storm/Canyon Storm time displays throughout the bot.
  5. Google Sheet ID — paste the ID from your sheet's URL.
  6. Sheet sharing — a guided step to share your sheet with the bot's service account.

Once complete, the bot will list all the available feature setup commands so you know what to configure next.

Tip: You can run /setup again at any time to update any of these settings.

The bot's edit prompt when /setup is re-run on an already-configured server, showing the existing settings and Edit/No-changes buttons
Re-running /setup shows your current answers and lets you edit only what's changed.
The /view_configuration embed showing every wizard's saved settings — Core, Events, Train, Birthdays — in a single panel
Use /view_configuration any time to see every wizard's saved answers in one place.

Feature Setup

Each feature is configured independently. Set up only what you need — features you don't configure simply won't be active.

📣 Event Announcements — /setup_events

What to create in your sheet: Nothing required for this feature.

Run /setup_events to configure your events. The wizard first asks for settings that apply to all events:

You'll then see your event list with options to add, edit, or remove events. For each event you add:

Example blurb: Plague Marauder (AE) at {time} ({server_time} Server Time). Make sure to have offline participation checked!

🚂 Train Schedule — /setup_train

What to create in your sheet: A tab for your train schedule (e.g. Train Schedule).

Run /setup_train to configure the train schedule. The wizard walks through 8 steps:

  1. Schedule tab — which tab in your sheet stores the train schedule
  2. Blurb generation — whether you want the bot to generate a ChatGPT prompt each day. If no, steps 3–6 are skipped.
  3. Themes — a list of themes leadership can choose from (e.g. Birthday, Milestone, Welcome)
  4. Tones — a list of tone options (e.g. Default, More casual, More intense)
  5. Default tone — which tone is pre-selected
  6. Prompt templates — saved ChatGPT prompts using {name}, {theme}, {tone}, and {notes} as placeholders. Free tier keeps a single "Default"; 💎 Premium can save up to 10 named templates and pick the default.
  7. Reminders — whether the bot should post a reminder when someone is assigned the train, and if so, which channel and what time
  8. 💎 Train DM body — for Premium guilds with Member Roster Sync, the bot also DMs the assigned member directly when their train day comes up. You can customise that DM's wording with {name} as a placeholder, or use the bot's default. Free guilds can configure this now — it just won't fire until you upgrade.

Day-to-day use:

🎂 Birthdays — /setup_birthdays

What to create in your sheet: A tab containing your member roster with name and birthday columns (e.g. Birthdays, or your existing member tab).

Run /setup_birthdays to configure birthday tracking. The wizard walks through 9 steps:

  1. Enable birthday tracking — opt in or skip the feature entirely
  2. Sheet tab — which tab contains birthday data
  3. Name column — the column letter containing member names (e.g. A)
  4. Birthday column — the column letter containing birthdays (e.g. B)
  5. Train integration — whether birthdays are automatically added to the train schedule. If no, steps 6–7 are skipped.
  6. Birthday placement — exact birthday only, or allow 1 day before/after if the birthday is taken
  7. Train schedule lookahead — how many days in advance to look ahead (default 14)
  8. Birthday reminders — whether the bot posts a birthday message in Discord, and if so, which channel and what time
  9. 💎 Birthday DM body — for Premium guilds with Member Roster Sync (and a Discord ID column wired up in the birthday sheet), the bot also DMs the member directly with a personal note. Customise that DM's wording with {name} as a placeholder, or use the bot's default. Free guilds can configure now — it just won't fire until you upgrade.

Birthday messages say: 🎂 Today is [name]'s birthday!

If train integration is on, birthdays auto-populate the train schedule once per day, just after server-time midnight. Use /train_addbirthdays to trigger the check on demand if you need a birthday added sooner.

⚔️ Desert Storm — /setup_desertstorm

What to create in your sheet: A tab for Desert Storm assignments (e.g. DS Assignments).

Run /setup_desertstorm to configure Desert Storm. The wizard walks through 7 steps:

  1. Sheet tab — the bot manages the data structure here automatically, no formatting needed
  2. Teams — whether you run Team A & B, Team A only, or Team B only
  3. Log channel — where participation log summaries are posted after each event
  4. Post channel — where the finished mail is posted when leadership clicks Post & Copy at the end of /desertstorm_draft
  5. Mail template — if you run both teams, choose one template for both or separate templates per team. A default template is provided — use it as-is or paste your own
  6. Participation tracking (optional) — opt in to log each event's participation. You define the questions yourself and where the bot reads member names from. Sub-steps: sheet tab to write rows to, roster source (tab + name column + optional alias column + first data row), and a questions builder. Free tier supports up to 3 questions across Text, Yes/No, Numeric, and Roster names types. 💎 Premium unlocks unlimited questions plus Single-select, Multi-select, and Date.
  7. 💎 Reminder DM body — when leadership runs /desertstorm_remind, the bot DMs every roster member this message. Customise it with {name} as a placeholder, or use the bot's default. Stored separately for DS and CS so each event type can have its own copy. Free guilds can configure now — it just won't fire until you have Premium + Member Roster Sync.

Available placeholders in your template:

Day-to-day use:

🏜️ Canyon Storm — /setup_canyonstorm

What to create in your sheet: A tab for Canyon Storm assignments (e.g. CS Assignments).

Run /setup_canyonstorm — the setup is identical to Desert Storm above (7 steps including Post Channel, optional participation tracking, and an optional 💎 Premium reminder DM body). Canyon Storm event times vary by server, so the bot doesn't bake in a fixed schedule — your alliance's storm times come from your own calendar.

Day-to-day use:

📋 Survey — /setup_survey

What to create in your sheet: Two tabs — one for current member stats (e.g. Squad Powers) and one for submission history (e.g. Survey History).

Run /setup_survey to configure the default survey:

  1. Survey channel — where the survey button is posted for members to access
  2. Notification channel — where leadership is notified when a member submits
  3. Stats tab — updated with each submission (one row per member)
  4. History tab — a timestamped record of every submission
  5. Intro message — the message members see before starting the survey
  6. Questions — choose from the default Last War question set, edit individual questions, or build your own from scratch

The question builder supports three question types on the free tier:

💎 Premium adds two more question types — Multi-select (pick multiple options) and Date (formatted entry with strptime validation) — and unlocks min/max bounds on numeric questions for input validation.

💎 Multi-survey (Premium): alliances can configure more than one survey, each with its own questions, channel, intro, notification target, and reminder body. Manage everything from /survey — when Premium is active, the command renders a list of every configured survey along with Add / Edit / Remove buttons. Adding asks for a display name and routes through the same setup wizard; editing covers both the default survey and any extras; remove deletes an extra (the default can't be removed).

Day-to-day use:

📈 Growth Tracking — /setup_growth

What to create in your sheet: A tab for your member roster (can be the same tab used by the survey, or any other tab). The bot will create the growth output tab and the breakdown tab automatically if they don't exist.

Run /setup_growth to configure growth tracking:

  1. Enable — opt in to growth tracking
  2. Source tab — which tab contains your member data
  3. Data start row — which row your data starts on (usually row 2, after a header)
  4. Name column — the column letter containing member names
  5. Metrics — which columns to snapshot, each with a label and column letter. You can track as many as you want (e.g. 1st Squad Power → column E, THP → column I)
  6. Growth tab — where snapshots are written. Created automatically if it doesn't exist.
  7. Snapshot schedule — monthly on a specific day, or every X days

The growth tab will have a column per metric per snapshot period so you can see how each metric changed over time. From the second snapshot onward, every member's percent change is also classified into one of five buckets — Increased (≥ 20%), Steady (10–20%), Low (5–10%), None (0–5%), or Decline (< 0%) — and written to a separate Growth Breakdown sheet tab. Click 📊 See most recent Breakdown on /growth to see who is climbing and who is stalled at a glance.

Day-to-day use:

💎 Growth Breakdown Customisation — /setup_growth_breakdown

Free for the read-only button; Premium for the auto-post and customisation. The bucket classification itself runs on every tier — the 📊 See most recent Breakdown button on /growth reads the breakdown tab for any guild with growth tracking enabled. This wizard configures the Premium layer on top of that.

Run /setup_growth_breakdown to configure:

  1. Breakdown tab — which tab in your sheet holds the breakdown data (default Growth Breakdown)
  2. Auto-post — yes/no. If yes, pick a channel where the bot posts the breakdown after every snapshot
  3. Bucket filter — which buckets fire the auto-post (e.g. only Decline + None if you only want to hear about stalled members). Empty filter posts every bucket
  4. Thresholds — keep the defaults (Increased ≥ 20%, Steady ≥ 10%, Low ≥ 5%, None ≥ 0%, Decline < 0%) or customise. Applies to every metric
  5. Labels — keep the defaults or rename buckets to your alliance's voice (e.g. Crushing It, Stalled, Going Backwards)

Threshold changes only affect future transitions — historical breakdown columns are frozen at the values that were in effect when they were written, so you can change your standards without rewriting your history.

🌟 Shiny Tasks — /setup_shiny_tasks

What to create in your sheet: Nothing — this feature has no sheet integration.

Free for every alliance. Run /setup_shiny_tasks to configure a daily auto-post listing every Last War server in your transfer-eligible window that has shiny tasks today:

  1. Enable — opt in to the daily post
  2. Announcement channel — where the post lands each day
  3. Server range — the minimum and maximum server numbers you can transfer to / from. Only servers within this window appear in the post
  4. Post time — when the announcement fires each day, in your timezone
  5. Message template — keep the default or customise. Use {servers} as the placeholder for the server list

The 3-day shiny-task cycle is derived from each server's creation date, so the same server is listed on the same day every cycle and the bot doesn't need to track which day of the cycle you're on.

💎 Member Roster Sync — /setup_members

What to create in your sheet: Nothing — the bot creates the roster tab if it doesn't already exist (or overwrites it on each sync if it does).

Premium-only. Powers every DM-based feature in the bot: birthday DMs, train assignment DMs, /desertstorm_remind / /canyonstorm_remind, /survey_remind via DM-via-roster, and auto-mention in train reminders. Without it those features either silently no-op or fall back to channel posts.

Run /setup_members to configure the sync:

  1. Roster tab — which sheet tab the roster is written to. The bot completely overwrites this tab on each sync, so use a tab that's only used for the roster. Created automatically if it doesn't exist.
  2. Filter by member role? — if you have a member role configured in /setup, you can limit the roster to just members holding that role. Pick No to include every (non-bot) member of the server.
  3. Auto-sync? — whether the bot should automatically re-sync when someone joins, leaves, or changes roles. Recommended on; pick No if you'd rather control sync timing yourself with /sync_members.

An initial sync runs at the end of the wizard so you can immediately use the DM-based features.

Day-to-day use:

📦 Data Portability — /export_config and /import_config

What to create in your sheet: Nothing.

Free for every alliance. Move your bot config to a new Discord server (or snapshot it as a backup you can restore later) without recreating every wizard answer by hand. Your alliance's data always lives in your own Google Sheet either way; these commands carry the bot-side wizard answers (templates, channels, schedules, custom questions) alongside it.

Exporting:

  1. Run /export_config in the source server. The bot shows a multi-select of every category that has saved data — core setup, events, DS, CS, train, birthday, growth, surveys, shiny tasks, member roster. Categories with no saved data don't appear
  2. Pick the categories you want to export, then confirm
  3. The bot DMs you a JSON file with the saved config from those categories. Keep it private — it contains your sheet ID and your old channel/role IDs

Importing:

  1. Run /import_config file:<the JSON file> in the destination server
  2. The bot validates the file, shows a preview of which categories are about to land, and asks you to confirm
  3. You'll be prompted to handle the source server's Google Sheet ID — use it as-is, keep the destination's existing sheet ID, type a different one, or skip and run /setup afterwards
  4. The bot walks a remap wizard for every channel and role referenced in the export. Each prompt lists what the old channel or role was used for so you know what you're remapping. Three options per prompt: Pick new (Discord channel or role select), Keep current (leave the destination's existing value), or Skip (clear the field)
  5. The bot applies the imported config per category and shows a summary embed naming what landed and what was skipped

Same-guild re-imports still walk the remap wizard — handy if you revamped your server's channels or roles. If a category fails to apply (malformed value, unexpected schema), the others still land and the result embed tells you which one to fix in the JSON and re-run.


All set? Head back to the Day-to-Day Quick Reference on the home page or browse the full Commands list.