{
  "schemaVersion": "1.0",
  "item": {
    "slug": "discord-digest",
    "name": "Discord Digest",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/NikolayBohdanov/discord-digest",
    "canonicalUrl": "https://clawhub.ai/NikolayBohdanov/discord-digest",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/discord-digest",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=discord-digest",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/config_manager.py",
      "scripts/digest_formatter.py",
      "scripts/discord_api.py",
      "scripts/run_digest.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/discord-digest"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/discord-digest",
    "agentPageUrl": "https://openagent3.xyz/skills/discord-digest/agent",
    "manifestUrl": "https://openagent3.xyz/skills/discord-digest/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/discord-digest/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Discord Digest",
        "body": "Generate formatted digests from Discord servers. Reads channels via user token (no bot required)."
      },
      {
        "title": "1. Set Discord User Token",
        "body": "Get token from browser: Discord (web) → F12 → Network → any API request → Headers → Authorization value.\n\npython3 scripts/config_manager.py set-token \"YOUR_TOKEN\""
      },
      {
        "title": "2. Scan & Select Servers",
        "body": "List all servers the user belongs to:\n\npython3 scripts/discord_api.py \"TOKEN\" guilds"
      },
      {
        "title": "3. Scan & Select Channels",
        "body": "List channels for a specific server:\n\npython3 scripts/discord_api.py \"TOKEN\" channels SERVER_ID"
      },
      {
        "title": "4. Add Server to Config",
        "body": "python3 scripts/config_manager.py add-server '{\"id\":\"SERVER_ID\",\"name\":\"Server Name\",\"channels\":[{\"id\":\"CH_ID\",\"name\":\"channel-name\",\"type\":\"text\"}]}'"
      },
      {
        "title": "Generate Digest",
        "body": "python3 scripts/run_digest.py [--hours 24] [--server SERVER_ID]"
      },
      {
        "title": "Validate Token",
        "body": "python3 scripts/discord_api.py \"TOKEN\" validate"
      },
      {
        "title": "Token Expiry Handling",
        "body": "Before each digest run, the token is validated via GET /users/@me. If it returns 401:\n\nNotify user: \"⚠️ Discord token expired, send new token\"\nWait for new token\nUpdate config: python3 scripts/config_manager.py set-token \"NEW_TOKEN\"\nRetry digest"
      },
      {
        "title": "Output Format",
        "body": "**#SERVER_NAME DD.MM.YY**\n\n[→post](message_url) | 📝 channel-name\n**Post Title**\nDetails: Brief 1-sentence summary of the post content\nLinks: [source 1](url) | [source 2](url)"
      },
      {
        "title": "Config File",
        "body": "Located at ~/.openclaw/workspace/config/discord-digest.json:\n\n{\n  \"discord_token\": \"...\",\n  \"servers\": [\n    {\n      \"id\": \"829331298878750771\",\n      \"name\": \"DOUBLETOP SQUAD\",\n      \"channels\": [\n        {\"id\": \"1238663837515911198\", \"name\": \"drops-alerts\", \"type\": \"text\"}\n      ]\n    }\n  ],\n  \"digest_period_hours\": 24\n}"
      },
      {
        "title": "Scripts",
        "body": "ScriptPurposediscord_api.pyDiscord HTTP API client (user token auth)digest_formatter.pyFormat messages into digestconfig_manager.pyManage token, servers, channels configrun_digest.pyMain entry: validate → read → format"
      },
      {
        "title": "Rate Limits",
        "body": "Discord API rate limits: ~1 req/sec with automatic retry on 429. The scripts include built-in rate limit handling with exponential backoff."
      },
      {
        "title": "Important Notes",
        "body": "User tokens may violate Discord ToS — use at your own risk for personal use only\nToken can expire; the skill includes validation and notification flow\nNo external dependencies — uses only Python 3 stdlib (urllib, json)"
      }
    ],
    "body": "Discord Digest\n\nGenerate formatted digests from Discord servers. Reads channels via user token (no bot required).\n\nSetup\n1. Set Discord User Token\n\nGet token from browser: Discord (web) → F12 → Network → any API request → Headers → Authorization value.\n\npython3 scripts/config_manager.py set-token \"YOUR_TOKEN\"\n\n2. Scan & Select Servers\n\nList all servers the user belongs to:\n\npython3 scripts/discord_api.py \"TOKEN\" guilds\n\n3. Scan & Select Channels\n\nList channels for a specific server:\n\npython3 scripts/discord_api.py \"TOKEN\" channels SERVER_ID\n\n4. Add Server to Config\npython3 scripts/config_manager.py add-server '{\"id\":\"SERVER_ID\",\"name\":\"Server Name\",\"channels\":[{\"id\":\"CH_ID\",\"name\":\"channel-name\",\"type\":\"text\"}]}'\n\nUsage\nGenerate Digest\npython3 scripts/run_digest.py [--hours 24] [--server SERVER_ID]\n\nValidate Token\npython3 scripts/discord_api.py \"TOKEN\" validate\n\nToken Expiry Handling\n\nBefore each digest run, the token is validated via GET /users/@me. If it returns 401:\n\nNotify user: \"⚠️ Discord token expired, send new token\"\nWait for new token\nUpdate config: python3 scripts/config_manager.py set-token \"NEW_TOKEN\"\nRetry digest\nOutput Format\n**#SERVER_NAME DD.MM.YY**\n\n[→post](message_url) | 📝 channel-name\n**Post Title**\nDetails: Brief 1-sentence summary of the post content\nLinks: [source 1](url) | [source 2](url)\n\nConfig File\n\nLocated at ~/.openclaw/workspace/config/discord-digest.json:\n\n{\n  \"discord_token\": \"...\",\n  \"servers\": [\n    {\n      \"id\": \"829331298878750771\",\n      \"name\": \"DOUBLETOP SQUAD\",\n      \"channels\": [\n        {\"id\": \"1238663837515911198\", \"name\": \"drops-alerts\", \"type\": \"text\"}\n      ]\n    }\n  ],\n  \"digest_period_hours\": 24\n}\n\nScripts\nScript\tPurpose\ndiscord_api.py\tDiscord HTTP API client (user token auth)\ndigest_formatter.py\tFormat messages into digest\nconfig_manager.py\tManage token, servers, channels config\nrun_digest.py\tMain entry: validate → read → format\nRate Limits\n\nDiscord API rate limits: ~1 req/sec with automatic retry on 429. The scripts include built-in rate limit handling with exponential backoff.\n\nImportant Notes\nUser tokens may violate Discord ToS — use at your own risk for personal use only\nToken can expire; the skill includes validation and notification flow\nNo external dependencies — uses only Python 3 stdlib (urllib, json)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/NikolayBohdanov/discord-digest",
    "publisherUrl": "https://clawhub.ai/NikolayBohdanov/discord-digest",
    "owner": "NikolayBohdanov",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/discord-digest",
    "downloadUrl": "https://openagent3.xyz/downloads/discord-digest",
    "agentUrl": "https://openagent3.xyz/skills/discord-digest/agent",
    "manifestUrl": "https://openagent3.xyz/skills/discord-digest/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/discord-digest/agent.md"
  }
}