Invite the bot
Use the Bot Invite link and select a server where you have permission to manage apps. The invite includes bot and slash-command scopes with administrator permissions.
Use this page as the quick operating manual for the Discord bot and web dashboard. It covers setup, command usage, dashboard tabs, and the daily workflows your staff will use most.
Valkyrie needs both Discord-side permissions and dashboard configuration before everything works smoothly.
Use the Bot Invite link and select a server where you have permission to manage apps. The invite includes bot and slash-command scopes with administrator permissions.
Sign in with Discord. The dashboard only shows servers where your account can manage the server or has administrator access.
Open the server in the dashboard and use Overview to confirm required channels, roles, ranks, command levels, training stages, and subdivisions.
If commands were added, removed, or renamed in the code, restart the bot so Discord receives the updated slash-command definitions.
The dashboard is the command center for server configuration and live operations. Save changes from each section before moving on to another workflow.
The Servers page lists configured servers and manageable servers that still need the bot invited. Pick Manage to open server settings.
Use the setup checklist and counters to see what is ready. Missing setup items usually explain why a command cannot apply a role or log to a channel.
Settings controls core channels, the join auto role, welcome embed wording, LOA behavior, activity limits, and IA channels. Commands lets you enable modules and restrict them to specific roles.
Use Promotions, Ranks, Training, Subdivisions, and Unit Members to keep your server structure aligned with the Discord roles the bot assigns.
Pickers load from Discord when the bot token can reach the selected server. If a picker says resources are unavailable, check the bot token, bot membership, and network access.
The roster page is a spreadsheet-style staff list for each server. It can be created from the default template or imported from a CSV export, then edited directly in the browser.
From the dashboard, choose a server and select the Roster tab. If no roster exists yet, start with the default roster template or upload a CSV file exported from Google Sheets.
Use Roster Controls to import a public Google Sheets CSV link or upload a CSV file. The importer detects common columns such as name, call sign, rank, Discord ID, status, hours, dates, and notes.
Rows can be added, deleted, and edited inline. Sections group members on the sheet, roster tabs create separate pages, and column visibility controls which fields are shown.
Click Save Roster after changes. Saving refreshes monthly activity hours from the 1st of the current month and queues Discord rank and sub-unit role updates when the row has a Discord ID.
Use controls to create or rename tabs, delete the roster, import sheets, hide columns, edit section names, and adjust roster colors. These controls only appear for users with dashboard permission.
Status cells use the roster color settings. Default statuses include Active, Semi Active, Inactive, Vacant, LOA, Reserve, and Suspended, and imported custom status labels remain visible.
Notes fields open a note dialog instead of a plain text cell. Add dated notes for context while keeping the main sheet compact and easy to scan.
The roster member picker loads Discord guild members, including members who joined before the bot was added. Blank onboarding dates are filled from Discord join dates when a row can be matched by Discord ID, Discord name, or member name.
If imported rank labels do not match configured dashboard ranks, the roster will warn about unmapped ranks. To resolve them, add the missing rank names in the bot dashboard's Ranks section, save the config, then save the roster again so Discord rank sync can run.
Commands are controlled by Discord permissions plus any role restrictions configured in the dashboard Commands tab.
Post duty panels and inspect shift records.
/activity panel posts clock-in controls.
/activity stats checks one member's time.
/activity roster shows current activity.
/activity leaderboard ranks weekly or all-time activity.
Handle common staff moderation actions with audit logging.
/mod warn, kick, ban, unban
/mod timeout and /mod untimeout
/purge clears recent messages, optionally for one member.
Move members through training and rank structures.
/rank set assigns a configured rank.
/rank info checks a member's rank.
/training complete advances a member.
/training status and reset inspect or restart progress.
Track LOA status and apply the configured LOA role.
/loa set adds an LOA through an end date.
/loa end clears an LOA early.
/loa check and /loa list review active LOAs.
Open and close IA cases while preserving case state.
/open case places a member on administrative leave.
/case close resume restores the member.
/case close terminate closes the case and removes the member.
Maintain subdivision status boards and membership.
/subdivision post, update, add, remove, view
/setcommander assign, remove, setrole
/unit assign, remove, setrole, list, member
Create and revise polished announcement embeds without writing JSON by hand.
/embed opens a modal for title, description, color, and target channel.
/editembed edits a bot-sent embed by message ID or message link.
Post /activity panel in the desired channel. Members use the panel buttons to start, pause, resume, and end shifts. The dashboard Operations tab shows active and recent shift data.
Create the Discord role, then add it in Dashboard > Ranks. Save the config, then use /rank set or the Promotions tab to assign it.
Configure subdivisions in the dashboard, then run /subdivision post. Later updates from commands or the dashboard will keep the posted board in sync.
Use /open case to place the member on administrative leave and create case records. Close with /case close resume or /case close terminate.
The Advanced tab is powerful and bypasses normal form guardrails. Use it for backup, restore, or careful bulk edits only when the standard tabs cannot express the change.