Discord bot for alliance leadership

LW Alliance Helper

A friendly command center for Last War alliance leadership teams — for announcements, train schedules, birthdays, storm mail drafts, squad power surveys, and growth tracking. Your alliance data lives in your own Google Sheet, we help you organize and use it.

LW Alliance Helper friendly robot mascot logo
💬 Join the Community Server
Latest Release:
Full changelog  ·  Roadmap

What It Does

📣 Event Announcements — Schedule Plague Marauder, Zombie Siege, and any other recurring events. The bot posts a draft to leadership for review at your chosen time each event day, then sends the final announcement to your public channel once approved. A 5-minute warning fires automatically before the event starts.

🚂 Train Schedule — Track who gets the alliance train each day and generate a personalised ChatGPT prompt to help write a blurb for that member. Birthdays can be automatically added to the schedule in advance.

🎂 Birthdays — Read birthday data from your Google Sheet and optionally add members to the train schedule on their birthday, post birthday announcements in Discord, or both.

⚔️ Desert Storm — Generate ready-to-copy team mail drafts for Team A and Team B each week. Configure participation tracking with custom questions and log sit-outs after each event.

🏜️ Canyon Storm — Same as Desert Storm — mail generation, team tracking, and participation logging with the questions you define.

📋 Survey — Let members submit their stats through a private Discord thread. Responses are saved directly to your Google Sheet and leadership gets a notification for each submission. 💎 Premium guilds can configure multiple named surveys.

📈 Growth Tracking — Track your alliance's growth over time by taking periodic snapshots of any stats you choose — squad powers, THP, total kills, or anything else in your sheet. You define the metrics, the source, and the schedule. Each snapshot also classifies every member's percent change into a bucket (Increased / Steady / Low / None / Decline) so you can see who is climbing and who is stalled at a glance.

🌟 Shiny Tasks — Daily auto-post listing every Last War server in your alliance's transfer-eligible window that has shiny tasks today. No more checking by hand and copy-pasting the list into your in-game mail.

📦 Data Portability — Migrating to a new Discord? Backing up before a leadership handover? /export_config dumps your saved bot config to a JSON file, and /import_config walks a guided channel and role remap wizard to apply it to another server. Your alliance's data already lives in your own Google Sheet; this carries the bot-side wizard answers alongside it.

Daily event announcement posted by the bot, showing Zombie Siege and Plague Marauder with both local and server times
📣 Daily event announcement
Train schedule, entry picker, and ChatGPT prompt output for the assigned member
🚂 Train flow with prompt generation
Upcoming birthdays in the next 14 days, with day-counts
🎂 Upcoming birthdays at a glance
Survey response notification showing all the configured fields a member submitted
📋 Survey submission notification

Your Data Stays With You

Alliance Helper is built around a simple principle: your alliance's data lives in your own Google Sheet, on the Google account you control. Power scores, growth snapshots, train history, participation logs, member rosters — all of it is written to your sheet. The bot helps to organize; you own the data.

Discord embed showing Growth Tracking config on the left, the same data displayed in a Google Sheet on the right
The same growth snapshot, viewed in Discord and in your own Google Sheet.

For details of what data is housed where, see Where Your Data Lives on the Privacy page.


Day-to-Day Quick Reference

Already set up? These are the commands leadership reaches for most. For the full list of every slash command and what it does, see the Commands reference.

SituationCommand
Post or repost the survey button/survey_post
Manage the train schedule (add, update, generate prompt, clear)/train
Add upcoming birthdays to the train schedule/train_addbirthdays
See upcoming birthdays/birthdays
Open the event editor/events
Generate a Desert Storm mail draft/desertstorm_draft
Generate a Canyon Storm mail draft/canyonstorm_draft
Log Desert Storm participation/desertstorm_participation
Log Canyon Storm participation/canyonstorm_participation
Look up a past Desert Storm log/desertstorm_log [date]
Look up a past Canyon Storm log/canyonstorm_log [date]
Send or schedule a survey reminder/survey_remind
💎 DM a participation reminder before each storm/desertstorm_remind / /canyonstorm_remind
Run a growth snapshot manually/growth
View all configured settings/view_configuration
See all commands/help

Troubleshooting

Commands aren't showing up in Discord — Slash commands can take up to an hour to appear after the bot first joins your server. If they still aren't showing after that, try removing and re-inviting the bot.

A specific user runs a command and absolutely nothing happens — no response, no error, nothing in the channel — This is almost always Discord's Use Application Commands permission being denied for one of the user's roles. Discord blocks the interaction before it ever reaches the bot, so the bot has no record of it and the user sees nothing back. Edit the channel (or its parent category) → Permissions, then check every role the user has — not just the leadership role. If any role has "Use Application Commands" set to red X (deny), Discord blocks the interaction entirely; deny always wins over allow when a user has multiple roles. The fix is to either remove the deny on whatever role is causing it, or explicitly allow "Use Application Commands" on the leadership role at the channel/category level so it overrides @everyone.

"You don't have permission to use this command" — Most feature commands need to be run in the leadership channel by someone with the leadership role configured during /setup. The various /setup_* commands also accept anyone with server Administrator permission, so a server owner can configure a feature even without holding the leadership role.

"This bot hasn't been set up yet" — Run /setup first. The bot won't respond to feature commands until core setup is complete.

"Permission error" when the bot tries to access your sheet — The bot's service account doesn't have access to your sheet. Go to your sheet's sharing settings and make sure the service account email has been added as an Editor. You can find the email address by running /setup and checking Step 6.

A button stopped working after a bot restart — Discord buttons lose their connection to the bot when it restarts. The bot also automatically strips its buttons after they've gone idle for too long and appends a notice ("⏰ The actions for this have timed out. Use /events (or /train, etc.) to re-initiate.") so you'll see when a draft has gone stale rather than guessing. In either case, use the corresponding command to start a fresh flow:

ButtonUse instead
Event editor or approval/events
Train reminder prompt button/train
Desert Storm approval/desertstorm_draft
Canyon Storm approval/canyonstorm_draft
DS/CS log steps/desertstorm_participation or /canyonstorm_participation
Survey button/survey_post

A setup wizard is stuck or you want to start over — Run /cancel to abort any active setup wizard, then re-run the relevant /setup_* command.

Something else isn't working — Use /help to see all available commands and make sure the relevant feature has been configured with its /setup_* command. If the bot returns an error message with a Reference: ... code, include that ID when you report the issue — it lets us correlate to the exact failure on our side.

Still stuck or want to report a bug? Open an issue at our issue tracker. That's the best way to get in touch — we read every issue and reply there.