diff --git a/Features.md b/Features.md index e69de29..ff5c3fc 100644 --- a/Features.md +++ b/Features.md @@ -0,0 +1,248 @@ +# Features + +## Overview + +Pterodisbot provides a comprehensive suite of features for monitoring and managing Pterodactyl game servers through Discord. This page documents each feature in detail. + +--- + +## 🎮 Server Management + +### Interactive Server Selection +- **Dropdown Menu**: `/server_status` command displays an intuitive dropdown with all available game servers +- **Server Information**: Each option shows server name and description (truncated to 50 chars) +- **Statistics Dashboard**: Shows total servers, online count, and offline count before selection + +### Real-time Power Controls +Color-coded button controls for server power management: +- 🟢 **Green Start Button** - Powers on the server +- 🔴 **Red Stop Button** - Gracefully shuts down the server +- 🔵 **Blue Restart Button** - Reboots the server +- ⚪ **Grey Show Address Button** - Displays connection information (IP:Port) + +### Connection Information +- Instantly view server IP addresses and ports +- Fetches default allocation from Pterodactyl panel +- Displayed in ephemeral embed (private to requesting user) + +### Multi-channel Embeds +- Deploy server status displays across any channels where the bot has permissions +- Each server can have one active embed at a time +- Automatic cleanup of previous embeds when recreating + +--- + +## 📊 Server Monitoring + +### Live Status Tracking +- Auto-updating embeds display current server state (online/offline/starting) +- Color-coded status: 🔵 Blue for online, 🔴 Red for offline +- Last updated timestamp on every embed + +### Resource Usage Metrics +Real-time monitoring of: +| Metric | Description | +|--------|-------------| +| **CPU Usage** | Percentage with dynamic scaling for multi-core servers | +| **Memory Consumption** | Current usage vs. allocated limit (MiB) | +| **Disk Space** | Current usage vs. allocated limit (MiB) | +| **Network Activity** | Incoming/outgoing traffic (MiB) | +| **Uptime Counter** | Human-readable formatting (seconds, minutes, hours, days) | + +### Visual Metrics Graphs +- **Combined CPU and Memory Graphs** over the last minute +- **6 data points** captured at 10-second intervals +- **Discord dark theme-optimized styling** (#2f3136 background) +- **Automatic graph generation** and embedding for running servers +- **Dynamic CPU scaling** (100% increments) for accurate multi-vCPU visualization +- **Trend indicators** (increasing/decreasing/stable) for quick status assessment + +--- + +## 🔄 Intelligent Update System + +### Smart Update Triggers +Embeds refresh automatically when: +| Trigger | Condition | +|---------|-----------| +| **Power State Change** | Server transitions between offline ↔ starting ↔ running | +| **Significant CPU Change** | CPU usage shifts by more than 50% | +| **First Detection** | Server detected for the first time | +| **Periodic Uptime** | Running servers reach 10-minute intervals | + +### Rate Limit Protection +- Built-in delays (0.5s between servers, 1s during refresh) prevent Discord API throttling +- Optimized API calls minimize unnecessary requests through change detection +- Background task management with asynchronous update loop running every 10 seconds + +--- + +## 🔒 Security & Access Control + +### Single-Guild Restriction +- Bot operates exclusively in your designated Discord server (`AllowedGuildID`) +- All interactions from other guilds are rejected with ephemeral message + +### Role-based Permissions +- **"Game Server User" role required** for all server interactions +- Exact name match required (case-sensitive) +- Role used purely for access control - no special Discord permissions needed + +### Administrator Commands +- Special management commands restricted to server administrators +- `/refresh_embeds` - Force refresh all embeds +- `/purge_embeds` - Permanently delete all embeds + +### Interaction Validation +- Every button press and command verified for proper authorization +- Guild check + role check on every interaction +- Ephemeral error messages for unauthorized attempts + +--- + +## 💾 Data Persistence + +### Embed Location Storage +- Automatically remembers where embeds are posted +- Survives bot restarts and crashes +- Stored in `embed/embed_locations.json` + +### JSON-based Storage +- Human-readable embed tracking format: +```json +{ + "server_identifier": { + "channel_id": "123456789012345678", + "message_id": "987654321098765432" + } +} +``` + +### Metrics History +- Maintains 1 minute of server metrics data (6 data points per server) +- Automatic FIFO rotation using `deque(maxlen=6)` +- In-memory only (cleared on restart) + +### Automatic Cleanup +- Removes tracking for deleted embeds (Discord NotFound errors) +- Cleans up metrics for servers that no longer exist in panel +- Runs during each update cycle + +--- + +## 🛡️ Reliability Features + +### Comprehensive Error Handling +- Graceful recovery from API failures and network issues +- Failed embed updates logged but don't crash the update cycle +- Structured exception hierarchy for different failure modes + +### Rotating Log Files +- Automatic log rotation when file reaches 5MB +- Keeps 3 previous log files (`pterodisbot.log.1`, `.2`, `.3`) +- UTF-8 encoding for international character support + +### Debug-level Logging +- Detailed operational logs for troubleshooting +- API calls, state changes, cache operations at DEBUG level +- General operations at INFO level + +### Graceful Shutdown +- Proper cleanup on SIGINT/SIGTERM signals (Docker-friendly) +- Saves embed locations before shutdown +- Closes API sessions cleanly + +### Configuration Validation +- Startup verification of all required settings +- API key format validation (ptlc_/ptla_ or pacc_/papp_) +- URL protocol validation (http:// or https://) +- Guild ID integer validation + +### API Key Validation +- Checks for correct Pterodactyl API key formats +- Validates both client and application keys at startup +- Clear error messages for misconfigured keys + +--- + +## 🎨 User Interface + +### Color-coded Status +- 🔵 **Blue** for online/running servers +- 🔴 **Red** for offline/stopped servers +- Embed titles reflect current state + +### Ephemeral Interactions +- Private responses visible only to command users +- `/server_status` dashboard is ephemeral +- Button responses are ephemeral +- Address display is ephemeral + +### Real-time Feedback +- Instant confirmation messages for all actions +- Start/Stop/Restart show "is starting...", "is stopping...", "is restarting..." +- Error messages include API response details + +### Persistent Controls +- Server control buttons remain functional indefinitely +- Views created with `timeout=None` for infinite persistence +- Survives bot restarts (re-registered on startup) + +### Responsive Design +- Clean, Discord-optimized embed layouts +- Code-block formatting for resource usage tables +- Proper field inline/block arrangement + +--- + +## 🔧 Administrator Tools + +### Bulk Embed Refresh (`/refresh_embeds`) +- Force-refresh all server status embeds with one command +- Recreates all tracked embeds with fresh data +- Deletes old embed messages to prevent duplication +- Updates embed tracking storage +- Provides statistics on deleted and created embeds + +### Complete Purge System (`/purge_embeds`) +- Remove all bot embeds from the server with detailed statistics +- Real-time progress updates during multi-embed operations +- Shows deleted, missing, and error counts +- Success rate percentage calculation +- Clears embed tracking file + +### Progress Tracking +- Real-time progress updates during multi-embed operations +- Updates every 5 embeds processed +- Ephemeral progress embed with live counters + +### Comprehensive Logging +- All administrative actions logged with user attribution +- Command invocation, success/failure, statistics + +--- + +## Feature Comparison Table + +| Feature | Traditional | Docker | Kubernetes | +|---------|-------------|--------|------------| +| Server Management | ✅ | ✅ | ✅ | +| Real-time Monitoring | ✅ | ✅ | ✅ | +| Metrics Graphs | ✅ | ✅ | ✅ | +| Role-based Access | ✅ | ✅ | ✅ | +| Persistent Embeds | ✅ | ✅ | ✅ | +| Admin Tools | ✅ | ✅ | ✅ | +| Auto-restart | Manual | `--restart unless-stopped` | `restartPolicy: Always` | +| Log Persistence | Local files | Volume mount | PVC | +| Config Management | config.ini | Env vars / Volume | Secrets | +| Scaling | Manual | Manual | HPA support | + +--- + +## Related Pages + +- [Architecture](/Architecture) - System design and data flow +- [Installation](/Installation) - Deployment guides +- [Configuration](/Configuration) - Config options +- [Usage](/Usage) - Commands and workflows +- [Contributing](/Contributing) - Development guidelines \ No newline at end of file