mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-25 14:53:34 +00:00
* Add GitHub tool for IronClaw - manage repos, issues, PRs, and workflows * Add Discord channel for IronClaw - slash commands and button interactions * Security fixes: URL encoding, secret validation, Discord button handler - Add URL encoding for all path segments and query parameters (P1) - Add path segment validation to prevent path traversal - Add secret_exists check for better error messages (P2) - Fix http_request signature to use 5 args (P2) - Fix Discord button handler to check member field (P2) - Fix typo in Discord slash command format (P2) - Add github.capabilities.json and discord.capabilities.json (Blocker) - Add Cargo.toml for Discord channel (Blocker) - Add limit caps (max 100) for all list operations (P3) - Remove debug logging * Apply Copilot review fixes Security & Code Quality: - Use secret_get instead of workspace_read for GitHub token - Remove manual Authorization header (host injects via capabilities) - Add validation for file paths (reject path traversal) - Add validation for workflow_id and git refs - Fix url_encode_query comment - Add release profile optimizations to Cargo.toml files - Fix package names to match conventions (github-tool, discord-channel) - Add metadata fields to Cargo.toml - Fix rate limits to be consistent (60/min, 3600/hr) - Fix Discord user_name to filter empty global_name - Fix Discord metadata serialization error handling - Update Discord README to clarify which secrets are used by host vs WASM - Better formatting for Discord command option values * applied all PR change requests and comments * cleaned up workspace * Adding validation for empty path segments and event enum in GitHub tool * addedvalidation for events and vaidation to reject empty file path in github tools and implemented safe UTF-8 trunacating * added codegen units and updated truncating logic also update capabilities.json as requested by copilot review * added codegen units and updated truncating logic also update capabilities.json as requested by copilot review * fixed message trucating and remove url_encode alias, also appled all requested changes from last PR comment --------- Co-authored-by: root <root@cafx> Co-authored-by: Peni <[email protected]> Co-authored-by: Illia Polosukhin <[email protected]> Co-authored-by: firat.sertgoz <[email protected]>
122 lines
2.9 KiB
Markdown
122 lines
2.9 KiB
Markdown
# Discord Channel for IronClaw
|
|
|
|
WASM channel for Discord integration - handle slash commands and button interactions via webhooks.
|
|
|
|
## Features
|
|
|
|
- **Slash Commands** - Process Discord slash commands
|
|
- **Button Interactions** - Handle button clicks
|
|
- **Thread Support** - Respond in threads
|
|
- **DM Support** - Handle direct messages
|
|
|
|
## Setup
|
|
|
|
1. Create a Discord Application at <https://discord.com/developers/applications>
|
|
2. Create a Bot and get the token
|
|
3. Set up Interactions URL to point to your IronClaw instance
|
|
4. Copy the Application ID and Public Key
|
|
5. Store in IronClaw secrets:
|
|
|
|
```bash
|
|
ironclaw secret set discord_bot_token YOUR_BOT_TOKEN
|
|
```
|
|
|
|
**Note:** The `discord_bot_token` secret is the only value read directly by this
|
|
Discord channel WASM component. The `discord_app_id` and `discord_public_key`
|
|
secrets are used by the IronClaw host (for example, to verify Discord
|
|
interaction signatures and manage slash command registration) and are not
|
|
accessed from the WASM module itself.
|
|
|
|
## Discord Configuration
|
|
|
|
### Register Slash Commands
|
|
|
|
```bash
|
|
curl -X POST \
|
|
-H "Authorization: Bot YOUR_BOT_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
https://discord.com/api/v10/applications/YOUR_APP_ID/commands \
|
|
-d '{
|
|
"name": "ask",
|
|
"description": "Ask the AI agent",
|
|
"options": [{
|
|
"name": "question",
|
|
"description": "Your question",
|
|
"type": 3,
|
|
"required": true
|
|
}]
|
|
}'
|
|
```
|
|
|
|
### Set Interactions Endpoint
|
|
|
|
In your Discord app settings, set:
|
|
|
|
- Interactions Endpoint URL: `https://your-ironclaw.com/webhook/discord`
|
|
|
|
## Usage Examples
|
|
|
|
### Slash Command
|
|
|
|
User types: `/ask question: What is the weather?`
|
|
|
|
The agent receives:
|
|
|
|
```text
|
|
User: @username
|
|
Content: /ask question: What is the weather?
|
|
```
|
|
|
|
### Button Click
|
|
|
|
When a user clicks a button in a message, the agent receives:
|
|
|
|
```text
|
|
User: @username
|
|
Content: [Button clicked] Original message content
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
If an internal error occurs (e.g., metadata serialization failure), the tool attempts to send an ephemeral message to the user:
|
|
|
|
```text
|
|
❌ Internal Error: Failed to process command metadata.
|
|
```
|
|
|
|
Check the host logs for detailed error information.
|
|
|
|
## Advanced Usage
|
|
|
|
### Embeds
|
|
|
|
To send embeds, include an `embeds` array in the `metadata_json` field of the agent's response. The structure should match the Discord API `embed` object.
|
|
|
|
## Troubleshooting
|
|
|
|
### "Invalid Signature"
|
|
|
|
- Check that `discord_public_key` is set correctly in IronClaw secrets.
|
|
- This validation happens on the host before reaching the WASM.
|
|
|
|
### "401 Unauthorized"
|
|
|
|
- Check that `discord_bot_token` is set correctly in IronClaw secrets.
|
|
- Ensure the bot is added to the server.
|
|
|
|
### "Interaction Failed"
|
|
|
|
- The interaction might have timed out (Discord requires a response within 3 seconds).
|
|
- The `interactions_endpoint_url` might be unreachable.
|
|
|
|
## Building
|
|
|
|
```bash
|
|
cd channels-src/discord
|
|
cargo build --target wasm32-wasi --release
|
|
```
|
|
|
|
## License
|
|
|
|
MIT/Apache-2.0
|