How to Set Up a Node War Discord Bot (Step-by-Step)

Most Node War organisation dies in a pinned message that nobody reads and a spreadsheet that three people can edit. A bot fixes that by putting the roster where your guild already is: in Discord, with buttons. This walkthrough takes you from an empty server to a scheduled, self-posting Node War roster in about ten minutes.

Before you start

  • You need Discord Administrator permission in the server. Every management slash command re-checks it at runtime, not just at registration.
  • Pick the channel your guild actually reads. The bot needs to view it, send messages in it, embed links, and mention whichever roles you choose for pings.
  • Decide your war night or nights up front. You can change them later, but the wizard asks early.

Step by step

  1. Invite the bot. Use the OAuth2 invite link and authorise it into your guild's Discord server. Nothing is configured yet; it is simply present.
  2. Give it a role it can work with. The bot's role needs permission to view and post in your announcement channel and to mention the roles you intend to ping. If pings arrive as plain text instead of notifications, this is the setting that is wrong.
  3. Set the announcement channel. Go to the channel you want rosters posted in and run /set-nwchannel. That saves the channel for this Discord server, and every scheduled post, repost and roster refresh from then on targets it.
  4. Create the event. Run /event create. A private wizard opens — only you can operate it, and it expires after ten minutes of inactivity.
  5. Choose tier and weekdays. Pick Tier 1, Tier 2 or Tier 3, then one or more war weekdays. The tier and weekday together set the default total capacity; the tier comparison guide lists every preset figure.
  6. Choose one-time or weekly. Weekly recurrence makes the event roll itself forward indefinitely. One-time closes after the war and stays closed.
  7. Set the announcement time, ping roles and specialist slots. The wizard collects the post time, the roles to mention, and the Defense, Zerker and Shai capacities. Mainball/FFA is derived from those — see the roster guide for the arithmetic.
  8. Confirm, and let the scheduler take over. On confirmation the event is stored with its war date and time plus its announcement date and time. You do not post it by hand.

What your members see

When the announcement lands, it carries signup buttons. A member clicks one, and their response is recorded and reflected in the message.

Signup buttons on a posted roster
ButtonEffect
FFAJoin Mainball/FFA, the main body of the war party.
DEFJoin the Defense group.
ZERKTake a reserved Berserker seat.
SHAITake a reserved Shai seat.
TentativeRecord a maybe. Does not consume roster capacity.
AbsenceRecord an explicit no. Does not consume roster capacity.
Sign offRemove the existing response entirely.

A member holds one response at a time. Clicking a second button moves them rather than duplicating them. If the group they pick is full, they go to Bench and the group they wanted is kept next to their name, so nobody is turned away and the demand signal survives.

The 60-second scheduler

Nothing about posting is manual. A scheduler runs the moment the Discord client becomes ready and then every 60 seconds after that. On each pass it:

  • Posts announcements that have come due, and records where the message landed.
  • Posts overdue announcements that fell due while the process was offline, so a restart or a deployment never silently skips a war.
  • Skips events that already carry a posted-at timestamp, so a restart cannot double-post the same roster.
  • Closes one-time events an hour after the configured war start time.
  • Rolls weekly events forward to their next selected weekday.

Scheduling decisions are timezone-aware, and the default post time and war start time come from configuration, so "the day before at 20:00" means the same thing to the bot as it does to your guild.

Need the roster out right now? /event repost publishes immediately and updates the stored message reference. The private preview from /event show carries the same Post now control.

Weekly recurrence

Enable recurrence and you stop creating events. After the war, the scheduler closes the finished roster display, reuses the same event ID for the next selected weekday, and clears the signup list so the new week starts empty. Your guild sees a fresh roster on the same cadence forever, and the event ID stays stable for anything that references it. Toggle it at any time with /event recurring.

Day-to-day management

  • /event list — up to ten open events for this server, with edit and delete controls.
  • /event edit — change days, announcement time, composition or repeat mode. Slot and schedule edits refresh the live Discord message in place.
  • /event set-slots — adjust Defense, Zerker and Shai in one command; Mainball/FFA recalculates and overflow moves to Bench.
  • /event close — stop new signups while preserving the roster that already exists.

Officers who prefer a browser can do all of this from the web dashboard. Sign in with Discord, choose a server you administer where the bot is installed, and you get the same scheduling, capacity and delivery controls — plus the parts that do not fit in a chat window, like scoreboard tracking. Every command and parameter is listed in the documentation.

If something does not post

Work down this list in order. Has /set-nwchannel been run in this server? Can the bot's role see and post in that channel? Is the event still active and not already closed? Does it already carry a posted-at timestamp from an earlier run? And is the announcement time the one you think it is, in the configured timezone rather than yours? Nearly every "the bot is broken" report resolves at one of those five checks.

Frequently asked questions

What permissions does the Node War bot need in Discord?

It needs to view and send messages in the announcement channel, embed links, and mention the roles you select for pings. Management slash commands additionally require the person running them to hold Discord Administrator permission in that server.

How does the bot know which channel to announce in?

Run /set-nwchannel in the channel you want announcements to land in. That saves the channel per Discord server, and every scheduled post, repost and roster refresh for that server targets it from then on.

How often does the scheduler check for events that are due?

It runs once as soon as the Discord client is ready and then every 60 seconds. Announcements that came due while the process was offline are posted on the next pass, so a restart or a deployment does not silently skip a war.

When is the roster announcement posted?

Events created through the wizard or the dashboard announce on the day before the war at the configured post time. Officers can also publish immediately with /event repost or the Post now button on the private event preview.

Does a weekly Node War need to be recreated every week?

No. Enable weekly recurrence and the scheduler closes the finished roster, rolls the event to the next selected weekday under the same event ID, and clears the signup list so the new week starts empty.

Can officers manage events from the web dashboard instead of Discord?

Yes. Sign in with Discord, pick a server you administer where the bot is installed, and you get the same scheduling, capacity and delivery controls. Changes made in the browser refresh the live Discord roster message when one exists.

Run your next Node War with Project Athena

Project Athena is free. Sign in with Discord, pick a server you administer, and you can have a roster posted before your next war window opens. The documentation covers every command, and the home page is the short version.

Sign in with Discord