Skip to content

Complete Command Guide

This guide provides detailed usage instructions and troubleshooting for every command in the Soluna Staff Bot v1.8.1.

📋 Table of Contents


👤 Profile Commands

/profile - View Staff Profile

Usage: /profile /profile @username

Description: View your profile or another staff member's profile including flights, certifications, and current LOA status.

Examples: - /profile - View your own profile - /profile @johnsmith - View John's profile

Common Issues: - ❌ "User not found" - User doesn't have a profile in the database - Solution: Use /manageprofile to add them first - ❌ "No permissions" - You're not in the Staff role - Solution: Ask an HR member to add you to the Staff role - ❌ "Database error" - Google Sheets connection issue - Solution: Check if credentials.json is correct and Google Sheet is shared

Tips: - ✅ Shows real-time flight counts and certifications - ✅ Displays current LOA status if active - ✅ Includes strike count and department info


/manageprofile - Add/Remove Staff Profiles

Usage: /manageprofile action:@user discord_id:"123456789" roblox_username:"PlayerName" roblox_id:"987654321" rank_category:"Executive Leadership" rank_order:1 position:"CEO" department:"Management"

Description: Add or remove staff profiles from the database (HRD only).

Parameters: - action: "add" or "remove" - user: Discord user to add/remove - discord_id: User's Discord ID - roblox_username: Roblox username - roblox_id: Roblox user ID - rank_category: Rank category from available ranks - rank_order: Rank order number (1=highest) - position: Job position title - department: Department name

Examples: - /manageprofile action:add @johnsmith discord_id:"123456789" roblox_username:"JohnSmith" roblox_id:"987654321" rank_category:"Executive Leadership" rank_order:1 position:"CEO" department:"Management" - /manageprofile action:remove @johnsmith

Common Issues: - ❌ "Invalid rank category" - Rank category doesn't exist - Solution: Use /addrank to add the rank category first - ❌ "Discord ID already exists" - User already has a profile - Solution: Use /updateprofile to modify existing profile - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to perform the action - ❌ "Google Sheets error" - Failed to update database - Solution: Check Google Sheets permissions and service account access

Tips: - ✅ Always use quotes for text parameters - ✅ Rank order determines position in staff list - ✅ Department helps organize staff by teams


/updateprofile - Update Staff Profile

Usage: /updateprofile @user field:roblox_username value:"NewName"

Description: Update specific fields in a staff member's profile (HRD only).

Parameters: - user: Discord user to update - field: Field to update (roblox_username, roblox_id, position, department, timezone) - value: New value for the field

Examples: - /updateprofile @johnsmith field:position value:"Senior Manager" - /updateprofile @johnsmith field:timezone value:"EST"

Common Issues: - ❌ "Field not found" - Invalid field name - Solution: Use valid field names: roblox_username, roblox_id, position, department, timezone - ❌ "User not found" - User doesn't have a profile - Solution: Use /manageprofile to add them first - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to perform the action

Tips: - ✅ Cannot update rank category/order (use rank management commands) - ✅ Use quotes for values with spaces - ✅ Updates are immediately reflected in all commands


/managecertifications - Manage Staff Certifications

Usage: /managecertifications action:add @user certification:"Flight Host Certificate" /managecertifications action:remove @user certification:"Flight Host Certificate"

Description: Add or remove certifications from a staff member (HRD only).

Parameters: - action: "add" or "remove" - user: Discord user to modify - certification: Certification name from available list

Examples: - /managecertifications action:add @johnsmith certification:"Flight Host Certificate" - /managecertifications action:remove @johnsmith certification:"Ground Operations"

Common Issues: - ❌ "Certification not found" - Certification doesn't exist - Solution: Use /addcertification to add it first - ❌ "Already has certification" - User already has this certification - Solution: No action needed, or remove then re-add - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to perform the action

Tips: - ✅ Certifications are stored as JSON in Google Sheets - ✅ Multiple certifications can be added to one user - ✅ Use exact certification names (case-sensitive)


✈️ Flight Commands

/addflight - Add Flight Attendance

Usage: /addflight @user flight_type:attended count:5 /addflight @user flight_type:hosted count:3

Description: Add flight attendance or hosting records to a staff member (Flight Dispatcher only).

Parameters: - user: Discord user to add flights to - flight_type: "attended" or "hosted" - count: Number of flights to add

Examples: - /addflight @johnsmith flight_type:attended count:5 - /addflight @johnsmith flight_type:hosted count:2

Common Issues: - ❌ "User not found" - User doesn't have a profile - Solution: Use /manageprofile to add them first - ❌ "Permission denied" - You're not in Flight Dispatcher role - Solution: Ask a Flight Dispatcher to perform the action - ❌ "Invalid flight type" - Must be "attended" or "hosted" - Solution: Use exact flight type names

Tips: - ✅ Flights add to existing count (don't replace) - ✅ Affects salary calculations immediately - ✅ Use reasonable flight counts to avoid errors


/removeflight - Remove Flight Attendance

Usage: /removeflight @user flight_type:attended count:2 /removeflight @user flight_type:hosted count:1

Description: Remove flight attendance or hosting records from a staff member (Flight Dispatcher only).

Parameters: - user: Discord user to remove flights from - flight_type: "attended" or "hosted" - count: Number of flights to remove

Examples: - /removeflight @johnsmith flight_type:attended count:2 - /removeflight @johnsmith flight_type:hosted count:1

Common Issues: - ❌ "Cannot remove more flights than exist" - Trying to remove too many flights - Solution: Check current flight count with /profile - ❌ "Flight count would go negative" - Same as above - Solution: Use smaller count or check current flights - ❌ "Permission denied" - You're not in Flight Dispatcher role - Solution: Ask a Flight Dispatcher to perform the action

Tips: - ✅ Cannot go below 0 flights - ✅ Affects salary calculations immediately - ✅ Use for correcting errors or adjustments


💰 Salary Management Commands

/setsalary - Set Salary Configuration

Usage: /setsalary salary_type:flight_attended_salary value:20 /setsalary salary_type:flight_hosted_salary value:40 /setsalary salary_type:executive_multiplier value:2.0

Description: Set salary rates and multipliers (Executive Board only).

Parameters: - salary_type: Type of salary setting to modify - value: New numeric value

Examples: - /setsalary salary_type:flight_attended_salary value:20 - /setsalary salary_type:executive_multiplier value:1.8

Common Issues: - ❌ "Invalid value" - Value must be a positive number - Solution: Use valid numbers (15, 30, 1.5, etc.) - ❌ "Permission denied" - You're not in Executive Board role - Solution: Ask an Executive Board member to perform the action - ❌ "Salary config sheet not found" - Missing Salary Config sheet - Solution: Create the Salary Config sheet with proper headers

Tips: - ✅ Changes affect all future salary calculations - ✅ Use decimal values for multipliers - ✅ View current settings with /salaryconfig


/calculatesalary - Calculate Salary

Usage: /calculatesalary /calculatesalary @username

Description: Calculate salary earnings based on flights and rank multipliers.

Examples: - /calculatesalary - Calculate your own salary - /calculatesalary @johnsmith - Calculate John's salary (requires HRD role)

Common Issues: - ❌ "User not found" - User doesn't have a profile - Solution: Use /manageprofile to add them first - ❌ "Permission denied" - Trying to view other's salary without HRD role - Solution: Only HRD can view other staff salaries - ❌ "Salary config not loaded" - Missing salary configuration - Solution: Set up Salary Config sheet or use defaults

Tips: - ✅ Shows base salary and multiplier breakdown - ✅ Uses current flight counts from profile - ✅ Updates in real-time with flight changes


/salaryconfig - View Salary Configuration

Usage: /salaryconfig

Description: View current salary rates and multipliers (Executive Board only).

Common Issues: - ❌ "Permission denied" - You're not in Executive Board role - Solution: Ask an Executive Board member to view settings - ❌ "No salary config found" - Missing configuration - Solution: Use /setsalary to set initial values

Tips: - ✅ Shows all current salary settings - ✅ Helps verify recent changes - ✅ Useful for planning salary adjustments


📄 LOA Management Commands

/requestloa - Request Leave of Absence

Usage: /requestloa start_date:"2026-02-10" end_date:"2026-02-15" reason:"Family vacation"

Description: Submit a Leave of Absence request with dates and reason.

Parameters: - start_date: Start date (YYYY-MM-DD format) - end_date: End date (YYYY-MM-DD format) - reason: Reason for LOA request

Examples: - /requestloa start_date:"2026-02-10" end_date:"2026-02-15" reason:"Family vacation" - /requestloa start_date:"2026-03-01" end_date:"2026-03-07" reason:"Medical appointment"

Common Issues: - ❌ "Invalid date format" - Must use YYYY-MM-DD - Solution: Use correct format: "2026-02-15" - ❌ "Start date cannot be in the past" - Date already passed - Solution: Use future dates only - ❌ "LOA duration exceeds 90 days" - Maximum duration exceeded - Solution: Keep LOA under 90 days - ❌ "Already have active LOA" - Current LOA still active - Solution: Wait for current LOA to end or expire

Tips: - ✅ Maximum 90 days duration - ✅ Auto-expires after end date - ✅ Logged in LOA channel for tracking - ✅ Requires Executive Board approval


/approveloa - Approve/Deny LOA Request

Usage: /approveloa @username action:approve reason:"Approved for family emergency" /approveloa @username action:deny reason:"Insufficient notice"

Description: Approve or deny pending LOA requests (Executive Board only).

Parameters: - user: Discord user with pending LOA - action: "approve" or "deny" - reason: Optional reason for decision

Examples: - /approveloa @johnsmith action:approve reason:"Approved for family emergency" - /approveloa @johnsmith action:deny reason:"Insufficient notice period"

Common Issues: - ❌ "No pending LOA request" - User has no pending request - Solution: Check /loastatus for pending requests - ❌ "LOA already processed" - Request already approved/denied - Solution: No action needed, already processed - ❌ "Permission denied" - You're not in Executive Board role - Solution: Ask an Executive Board member to perform the action

Tips: - ✅ User gets automatic DM notification - ✅ Decision logged in LOA channel - ✅ Can include optional approval/denial reason - ✅ Only pending requests can be processed


/loastatus - View All LOA Requests

Usage: /loastatus

Description: View all current LOA requests (Executive Board only).

Common Issues: - ❌ "Permission denied" - You're not in Executive Board role - Solution: Ask an Executive Board member to view status - ❌ "No LOA requests found" - No current requests - Solution: No action needed, or check back later

Tips: - ✅ Shows all pending, approved, and denied requests - ✅ Limited to 10 requests to avoid embed limits - ✅ Shows request IDs and status - ✅ Useful for managing multiple requests


/myloa - View Personal LOA Status

Usage: /myloa

Description: View your personal LOA status and history.

Common Issues: - ❌ "No LOA requests found" - You have no LOA history - Solution: Use /requestloa to submit a request - ❌ "Profile not found" - You don't have a staff profile - Solution: Ask HRD to add your profile first

Tips: - ✅ Shows current LOA if active - ✅ Displays request history - ✅ Shows approval status and timestamps - ✅ Private response only visible to you


⚠️ Strike Commands

/addstrike - Issue Strike

Usage: /addstrike @user reason:"Violation of company policy"

Description: Issue a strike to a staff member (HRD only).

Parameters: - user: Discord user to strike - reason: Reason for the strike

Examples: - /addstrike @johnsmith reason:"Violation of company policy" - /addstrike @johnsmith reason:"Unexcused absence from mandatory training"

Common Issues: - ❌ "User not found" - User doesn't have a profile - Solution: Use /manageprofile to add them first - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to perform the action - ❌ "Reason cannot be empty" - Must provide a reason - Solution: Always include a detailed reason

Tips: - ✅ Strikes are stored as JSON with timestamps - ✅ Multiple strikes can be issued - ✅ View strikes with /viewstrikes - ✅ Can be removed with /removestrike


/removestrike - Remove Strike

Usage: /removestrike @user reason:"Appeal accepted"

Description: Remove a strike from a staff member (HRD only).

Parameters: - user: Discord user to remove strike from - reason: Reason for removal

Examples: - /removestrike @johnsmith reason:"Appeal accepted" - /removestrike @johnsmith reason:"Mistakenly issued"

Common Issues: - ❌ "No strikes to remove" - User has no strikes - Solution: Check current strikes with /viewstrikes - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to perform the action

Tips: - ✅ Removes the most recent strike - ✅ Requires removal reason for audit trail - ✅ Updates strike count immediately - ✅ Logged for accountability


/viewstrikes - View Strikes

Usage: /viewstrikes /viewstrikes @username

Description: View strikes for yourself or another staff member.

Examples: - /viewstrikes - View your own strikes - /viewstrikes @johnsmith - View John's strikes

Common Issues: - ❌ "User not found" - User doesn't have a profile - Solution: Use /manageprofile to add them first - ❌ "No strikes found" - User has no strikes - Solution: This is normal, no action needed

Tips: - ✅ Shows strike count and details - ✅ Includes timestamps and reasons - ✅ Anyone can view their own strikes - ✅ HRD can view anyone's strikes


🛠️ Utility Commands

/dm - Send Direct Message

Usage: /dm @username message:"Your message here"

Description: Send a direct message to a user (HRD only).

Parameters: - user: Discord user to message - message: Message content

Examples: - /dm @johnsmith message:"Please attend the mandatory staff meeting at 3 PM" - /dm @johnsmith message:"Your LOA request has been approved"

Common Issues: - ❌ "Cannot send DM" - User has DMs disabled - Solution: Ask user to enable DMs or use alternative communication - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to send the message - ❌ "Message cannot be empty" - Must provide message content - Solution: Always include a message

Tips: - ✅ Useful for important announcements - ✅ Bypasses server notification limits - ✅ Private communication channel - ✅ Use for sensitive information


/dmrole - DM Role Members

Usage: /dmrole @StaffRole message:"Important announcement for all staff"

Description: Send a DM to all users with a specific role (HRD only).

Parameters: - role: Discord role to message - message: Message content

Examples: - /dmrole @Staff message:"Reminder: Monthly report due by Friday" - /dmrole @FlightTeam message:"New flight procedures effective immediately"

Common Issues: - ❌ "Role not found" - Invalid role name or mention - Solution: Use exact role name or @mention - ❌ "No users found" - No users have this role - Solution: Check if role is assigned to anyone - ❌ "Rate limited" - Too many messages sent too quickly - Solution: Wait a few minutes and try again

Tips: - ✅ Great for mass announcements - ✅ Respects Discord rate limits - ✅ Shows delivery count - ✅ Use for urgent communications


/flightformats - Generate Flight Formats

Usage: /flightformats

Description: Generate flight announcement formats (Flight Dispatcher only).

Common Issues: - ❌ "Permission denied" - You're not in Flight Dispatcher role - Solution: Ask a Flight Dispatcher to use this command

Tips: - ✅ Provides templates for flight announcements - ✅ Includes standard format examples - ✅ Useful for consistent messaging - ✅ Copy and paste ready formats


/activitycheck - Activity Check Results

Usage: /activitycheck message_id:"123456789012345678"

Description: Get list of members who didn't react to activity check (HRD only).

Parameters: - message_id: ID of the activity check message

Examples: - /activitycheck message_id:"123456789012345678"

Common Issues: - ❌ "Message not found" - Invalid message ID - Solution: Right-click message → Copy Message ID - ❌ "No reactions found" - Message has no reactions - Solution: Ensure message has emoji reactions - ❌ "Permission denied" - You're not in HRD role - Solution: Ask an HRD member to perform the check

Tips: - ✅ Useful for tracking staff activity - ✅ Shows non-responsive members - ✅ Helps with staff management - ✅ Exportable list for follow-up


/stafflist - View All Staff

Usage: /stafflist

Description: View all staff members organized by rank.

Common Issues: - ❌ "No staff found" - No profiles in database - Solution: Use /manageprofile to add staff members

Tips: - ✅ Organized by rank categories - ✅ Shows total staff count - ✅ Useful for organization overview - ✅ Updates in real-time


👑 Owner Commands

/debugcommands - Debug Commands

Usage: /debugcommands

Description: Debug command registration (Bot owner only).

Tips: - ✅ Shows registered command count - ✅ Lists first 10 commands - ✅ Useful for troubleshooting - ✅ Bot owner exclusive


/sync - Sync Commands

Usage: /sync

Description: Sync slash commands with Discord (Bot owner only).

Tips: - ✅ Updates command registry - ✅ Fixes missing commands - ✅ Required after adding new commands - ✅ Bot owner exclusive


/shutdown - Shutdown Bot

Usage: /shutdown

Description: Shutdown the bot (Bot owner only).

Tips: - ✅ Graceful shutdown - ✅ Saves current state - ✅ Bot owner exclusive - ✅ Use with caution


/botinfo - Bot Information

Usage: /botinfo

Description: Display bot information (Bot owner only).

Tips: - ✅ Shows bot statistics - ✅ Displays latency and version - ✅ Useful for monitoring - ✅ Bot owner exclusive


🔧 General Troubleshooting

Common Issues Across Commands

"Permission denied" - Cause: Wrong Discord role - Solution: Ensure you have the required role (Staff, HRD, Flight Dispatcher, Executive Board)

"User not found" - Cause: User doesn't have a profile - Solution: Use /manageprofile to add them to the database

"Database error" - Cause: Google Sheets connection issue - Solution: Check credentials.json and Google Sheet sharing settings

"Invalid format" - Cause: Wrong parameter format - Solution: Use quotes for text values, correct date format (YYYY-MM-DD)

Tips for Success

  1. Always use quotes for text parameters with spaces
  2. Check permissions before using commands
  3. Verify profiles exist before modifying user data
  4. Use exact names for certifications and ranks
  5. Check Google Sheets if database errors occur
  6. Ask for help if unsure about command usage

Need more help? Contact an HRD member or check the main documentation for detailed setup instructions.