mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-25 07:20:19 +00:00
* feat(discord): restore gateway channel flow in wasm * chore(discord): bump channel version to 0.2.1 * fix(discord): address review feedback on gateway channel PR - Add #[serde(default)] to DiscordMessageMetadata for backward compat with old Option<String> serialized metadata - Restore mention polling alongside Gateway (on_poll processes gateway events first, then runs poll_for_mentions if configured) - Update on_respond to handle source_message_id with message_reference for mention-poll reply threading - Implement Gateway presence status: dnd before pairing, online after - Implement Gateway resume (OP 6) with session_id tracking, falling back to fresh identify on Invalid Session (OP 9) - Extract WebsocketSessionState and spawn_websocket_poll to reduce nesting in start_websocket_runtime - Simplify should_apply_dm_pairing tautology - Remove completed plan docs - Fix clippy items_after_test_module in extensions handler Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * fix(discord): address review findings in gateway channel PR - Fix gateway presence always showing "online" by filtering empty owner_id strings from workspace store reads - Fix interaction followup using POST instead of PATCH to /messages/@original, which left deferred "thinking" state unresolved - Restore mention-poll pagination (up to 5 pages of 100 messages) - Remove dead ed25519-dalek and hex dependencies from WASM crate - Remove unused _channel_id parameter from remember_processed_id - Clean up redundant let binding in send_pairing_reply Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * fix(discord): address second-round review findings - Log warning when gateway event queue JSON fails to deserialize instead of silently returning empty (zmanian review item 1) - Defer presence update from OP 10 Hello to after OP 0 READY, per Discord gateway protocol which requires READY before non-Identify commands (zmanian review item 2) - Add 0-25% random jitter to websocket reconnect backoff per Discord's reconnection recommendations (zmanian suggestion) - Extract WebsocketPollContext struct to replace 19-parameter spawn_websocket_poll function (zmanian suggestion) - Document intent bitmask 4609 = GUILDS + GUILD_MESSAGES + DIRECT_MESSAGES in capabilities JSON (zmanian suggestion) Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: zhyaoyu <[email protected]> Co-authored-by: [email protected] <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
82 lines
2.4 KiB
JSON
82 lines
2.4 KiB
JSON
{
|
|
"version": "0.2.1",
|
|
"wit_version": "0.3.0",
|
|
"type": "channel",
|
|
"name": "discord",
|
|
"description": "Discord webhook channel for slash commands, components, and optional mention polling",
|
|
"setup": {
|
|
"required_secrets": [
|
|
{
|
|
"name": "discord_bot_token",
|
|
"prompt": "Enter your Discord Bot Token. Find it under Bot > Token in your Discord Application settings.",
|
|
"optional": false
|
|
},
|
|
{
|
|
"name": "discord_public_key",
|
|
"prompt": "Enter your Discord Application Public Key (found under General Information in your Discord Application settings).",
|
|
"optional": false
|
|
}
|
|
],
|
|
"setup_url": "https://discord.com/developers/applications"
|
|
},
|
|
"capabilities": {
|
|
"http": {
|
|
"allowlist": [
|
|
{ "host": "discord.com", "path_prefix": "/api/v10" },
|
|
{ "host": "gateway.discord.gg", "path_prefix": "/", "methods": ["GET"] }
|
|
],
|
|
"credentials": {
|
|
"discord_bot_token": {
|
|
"secret_name": "discord_bot_token",
|
|
"location": { "type": "header", "name": "Authorization", "prefix": "Bot " },
|
|
"host_patterns": ["discord.com"]
|
|
}
|
|
},
|
|
"rate_limit": {
|
|
"requests_per_minute": 60,
|
|
"requests_per_hour": 3600
|
|
}
|
|
},
|
|
"websocket": {
|
|
"url": "wss://gateway.discord.gg/?v=10&encoding=json",
|
|
"connect_on_start": true,
|
|
"identify_secret_name": "discord_bot_token",
|
|
"identify": {
|
|
"_intents_doc": "GUILDS(1) + GUILD_MESSAGES(512) + DIRECT_MESSAGES(4096)",
|
|
"intents": 4609,
|
|
"properties": {
|
|
"os": "linux",
|
|
"browser": "ironclaw",
|
|
"device": "ironclaw"
|
|
}
|
|
}
|
|
},
|
|
"secrets": {
|
|
"allowed_names": ["discord_bot_token", "discord_*"]
|
|
},
|
|
"channel": {
|
|
"allowed_paths": ["/webhook/discord"],
|
|
"allow_polling": true,
|
|
"callback_timeout_secs": 45,
|
|
"workspace_prefix": "channels/discord/",
|
|
"emit_rate_limit": {
|
|
"messages_per_minute": 100,
|
|
"messages_per_hour": 5000
|
|
},
|
|
"webhook": {
|
|
"signature_key_secret_name": "discord_public_key"
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"require_signature_verification": true,
|
|
"webhook_secret": null,
|
|
"polling_enabled": false,
|
|
"poll_interval_ms": 30000,
|
|
"mention_channel_ids": [],
|
|
"owner_id": null,
|
|
"dm_policy": "pairing",
|
|
"allow_from": []
|
|
}
|
|
}
|