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
- Flight Commands
- Salary Management Commands
- LOA Management Commands
- Strike Commands
- Utility Commands
- Owner Commands
👤 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
- Always use quotes for text parameters with spaces
- Check permissions before using commands
- Verify profiles exist before modifying user data
- Use exact names for certifications and ranks
- Check Google Sheets if database errors occur
- Ask for help if unsure about command usage
Need more help? Contact an HRD member or check the main documentation for detailed setup instructions.