{
  "schemaVersion": "1.0",
  "item": {
    "slug": "quotly-style-sticker",
    "name": "Quotly Style Sticker",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/sakullla/quotly-style-sticker",
    "canonicalUrl": "https://clawhub.ai/sakullla/quotly-style-sticker",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/quotly-style-sticker",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=quotly-style-sticker",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "agents/openai.yaml",
      "scripts/input.sample.json",
      "scripts/openclaw_quote_autoreply.py",
      "SKILL.md"
    ],
    "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. 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. 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-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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/quotly-style-sticker"
    },
    "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/quotly-style-sticker",
    "agentPageUrl": "https://openagent3.xyz/skills/quotly-style-sticker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/quotly-style-sticker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/quotly-style-sticker/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "How To Call (Agent)",
        "body": "Build payload with required selected_messages.\nWhen available, include event metadata for dedupe:\n\ncontext.event.channel (example: telegram)\ncontext.event.update_id (preferred)\nfallback keys: event_id, delivery_id, id\n\n\nRun:\n\npython3 scripts/openclaw_quote_autoreply.py --input <json-file-or->\n\n\nUse tool-emitted MEDIA: for delivery.\nFinal assistant text must be empty."
      },
      {
        "title": "Input",
        "body": "Required: selected_messages (array, must not be empty)\nOptional: context.event for dedupe accuracy\n\nchannel (string)\nupdate_id (string or number, preferred)\nevent_id / delivery_id / id (fallback keys)\n\n\nEach item structure:\n{\n  \"message\": {\n    \"message_id\": 2002,\n    \"text\": \"Forwarded message content\",\n    \"forward_from\": {\n      \"type\": \"hidden_user\",  // optional, indicates hidden user\n      \"id\": 123456789,        // optional, user id\n      \"first_name\": \"张\",     // required, first name or nickname\n      \"last_name\": \"三\",      // optional, last name\n      \"avatar_url\": \"\",       // optional, avatar url or base64 data (from user profile or platform API)\n      \"status_url\": \"\"        // optional, status url or base64 data (from user profile or platform API)\n    }\n  },\n  // Optional: override message fields\n  \"overwrite_message\": {\n    \"text\": \"哈哈哈哈哈\",\n    \"forward_from\": {\n      \"avatar_url\": \"\",       // from user profile or platform API\n      \"status_url\": \"\"        // from user profile or platform API\n    },\n    \"entities\": [  // optional, text formatting entities\n      {\"type\": \"bold\", \"offset\": 0, \"length\": 4},\n      {\"type\": \"italic\", \"offset\": 5, \"length\": 4}\n    ]\n  }\n}\n\n\nOptional canvas: width, height, scale, max_width, border_radius, picture_radius, background_color"
      },
      {
        "title": "Entities (Text Formatting)",
        "body": "The skill supports Telegram-style message entities for text formatting:\n\n[\n  {\"type\": \"bold\", \"offset\": 0, \"length\": 5},\n  {\"type\": \"italic\", \"offset\": 6, \"length\": 6},\n  {\"type\": \"url\", \"offset\": 13, \"length\": 15, \"url\": \"https://example.com\"}\n]\n\nSupported types: mention, hashtag, cashtag, bot_command, url, email, phone_number, bold, italic, underline, strikethrough, spoiler, code, pre, text_link, text_mention, custom_emoji\n\nEntity fields:\n\ntype (required) - entity type\noffset (required) - UTF-8 offset in text\nlength (required) - UTF-8 length\nurl (optional) - for text_link type\nuser (optional) - for text_mention type\nlanguage (optional) - for pre type\ncustom_emoji_id (optional) - for custom_emoji type"
      },
      {
        "title": "Field Mapping",
        "body": "Quote text:\n\noverwrite_message.text > message.text\n\n\nName/avatar:\n\noverwrite_message.forward_from > message.forward_from\n\n\nText formatting (entities):\n\noverwrite_message.entities > message.entities > message.caption_entities"
      },
      {
        "title": "Output",
        "body": "stdout includes:\n\nQuote sticker generated.\nMEDIA:<absolute-path-to-webp>\n\n\nFor duplicate retries detected within dedupe window, generation is skipped and no MEDIA: line is emitted."
      },
      {
        "title": "Environment Variables",
        "body": "QUOTLY_API_URL - QuotLy API endpoint (default: https://bot.lyo.su/quote/generate).\nQUOTLY_API_ALLOW_HOSTS - Comma-separated list of allowed API hosts (e.g., bot.lyo.su). When set, the skill will only contact hosts in this list.\nQUOTLY_AUDIT_LOG - Set to 1, true, or yes to enable audit logging to stderr.\nQUOTLY_DEDUP_WINDOW_SECONDS - Suppress duplicate requests for the same event/payload within this window (default: 180). Set to 0 to disable."
      },
      {
        "title": "Dedupe Key (How _build_dedupe_key reads input)",
        "body": "_build_dedupe_key(input_payload) resolves keys in this order:\n\ncontext.event.update_id (or event_id / delivery_id / id)\nevent.update_id (or event_id / delivery_id / id) when context.event is missing\ncontext.event.update.update_id (nested update object)\nFallback: stable hash of selected_messages\n\nRecommended wrapper payload:\n\n{\n  \"context\": {\n    \"event\": {\n      \"channel\": \"telegram\",\n      \"update_id\": 123456789\n    }\n  },\n  \"selected_messages\": [\n    {\n      \"message\": {\n        \"message_id\": 2002,\n        \"text\": \"Forwarded message content\"\n      }\n    }\n  ]\n}"
      },
      {
        "title": "Security Notes",
        "body": "This skill sends message content to an external API to generate stickers.\nSSRF Protection: Multiple layers of protection are implemented:\n\nHostname validation blocks internal/private IPs, localhost, and metadata endpoints\nDNS rebinding protection: resolves hostnames and validates resolved IPs\nPath traversal prevention: blocks .. and suspicious path patterns\nURL credentials stripping: removes username/password from URLs\n\n\nRequest Limits: Maximum payload size 1MB, maximum response size 10MB\nAudit Logging: Enable with QUOTLY_AUDIT_LOG=1 to log API requests and responses for security monitoring\nIn sensitive environments, always set QUOTLY_API_ALLOW_HOSTS to restrict which hosts the skill can contact.\nAvatar and status URLs from user input are passed to the rendering service; ensure input comes from trusted sources."
      },
      {
        "title": "Reply Rule",
        "body": "Do not output any final text."
      }
    ],
    "body": "QuotLy Style Sticker\nHow To Call (Agent)\nBuild payload with required selected_messages.\nWhen available, include event metadata for dedupe:\ncontext.event.channel (example: telegram)\ncontext.event.update_id (preferred)\nfallback keys: event_id, delivery_id, id\nRun:\npython3 scripts/openclaw_quote_autoreply.py --input <json-file-or->\nUse tool-emitted MEDIA: for delivery.\nFinal assistant text must be empty.\nInput\nRequired: selected_messages (array, must not be empty)\nOptional: context.event for dedupe accuracy\nchannel (string)\nupdate_id (string or number, preferred)\nevent_id / delivery_id / id (fallback keys)\nEach item structure:\n{\n  \"message\": {\n    \"message_id\": 2002,\n    \"text\": \"Forwarded message content\",\n    \"forward_from\": {\n      \"type\": \"hidden_user\",  // optional, indicates hidden user\n      \"id\": 123456789,        // optional, user id\n      \"first_name\": \"张\",     // required, first name or nickname\n      \"last_name\": \"三\",      // optional, last name\n      \"avatar_url\": \"\",       // optional, avatar url or base64 data (from user profile or platform API)\n      \"status_url\": \"\"        // optional, status url or base64 data (from user profile or platform API)\n    }\n  },\n  // Optional: override message fields\n  \"overwrite_message\": {\n    \"text\": \"哈哈哈哈哈\",\n    \"forward_from\": {\n      \"avatar_url\": \"\",       // from user profile or platform API\n      \"status_url\": \"\"        // from user profile or platform API\n    },\n    \"entities\": [  // optional, text formatting entities\n      {\"type\": \"bold\", \"offset\": 0, \"length\": 4},\n      {\"type\": \"italic\", \"offset\": 5, \"length\": 4}\n    ]\n  }\n}\n\nOptional canvas: width, height, scale, max_width, border_radius, picture_radius, background_color\nEntities (Text Formatting)\n\nThe skill supports Telegram-style message entities for text formatting:\n\n[\n  {\"type\": \"bold\", \"offset\": 0, \"length\": 5},\n  {\"type\": \"italic\", \"offset\": 6, \"length\": 6},\n  {\"type\": \"url\", \"offset\": 13, \"length\": 15, \"url\": \"https://example.com\"}\n]\n\n\nSupported types: mention, hashtag, cashtag, bot_command, url, email, phone_number, bold, italic, underline, strikethrough, spoiler, code, pre, text_link, text_mention, custom_emoji\n\nEntity fields:\n\ntype (required) - entity type\noffset (required) - UTF-8 offset in text\nlength (required) - UTF-8 length\nurl (optional) - for text_link type\nuser (optional) - for text_mention type\nlanguage (optional) - for pre type\ncustom_emoji_id (optional) - for custom_emoji type\nField Mapping\nQuote text:\noverwrite_message.text > message.text\nName/avatar:\noverwrite_message.forward_from > message.forward_from\nText formatting (entities):\noverwrite_message.entities > message.entities > message.caption_entities\nOutput\nstdout includes:\nQuote sticker generated.\nMEDIA:<absolute-path-to-webp>\nFor duplicate retries detected within dedupe window, generation is skipped and no MEDIA: line is emitted.\nEnvironment Variables\nQUOTLY_API_URL - QuotLy API endpoint (default: https://bot.lyo.su/quote/generate).\nQUOTLY_API_ALLOW_HOSTS - Comma-separated list of allowed API hosts (e.g., bot.lyo.su). When set, the skill will only contact hosts in this list.\nQUOTLY_AUDIT_LOG - Set to 1, true, or yes to enable audit logging to stderr.\nQUOTLY_DEDUP_WINDOW_SECONDS - Suppress duplicate requests for the same event/payload within this window (default: 180). Set to 0 to disable.\nDedupe Key (How _build_dedupe_key reads input)\n\n_build_dedupe_key(input_payload) resolves keys in this order:\n\ncontext.event.update_id (or event_id / delivery_id / id)\nevent.update_id (or event_id / delivery_id / id) when context.event is missing\ncontext.event.update.update_id (nested update object)\nFallback: stable hash of selected_messages\n\nRecommended wrapper payload:\n\n{\n  \"context\": {\n    \"event\": {\n      \"channel\": \"telegram\",\n      \"update_id\": 123456789\n    }\n  },\n  \"selected_messages\": [\n    {\n      \"message\": {\n        \"message_id\": 2002,\n        \"text\": \"Forwarded message content\"\n      }\n    }\n  ]\n}\n\nSecurity Notes\nThis skill sends message content to an external API to generate stickers.\nSSRF Protection: Multiple layers of protection are implemented:\nHostname validation blocks internal/private IPs, localhost, and metadata endpoints\nDNS rebinding protection: resolves hostnames and validates resolved IPs\nPath traversal prevention: blocks .. and suspicious path patterns\nURL credentials stripping: removes username/password from URLs\nRequest Limits: Maximum payload size 1MB, maximum response size 10MB\nAudit Logging: Enable with QUOTLY_AUDIT_LOG=1 to log API requests and responses for security monitoring\nIn sensitive environments, always set QUOTLY_API_ALLOW_HOSTS to restrict which hosts the skill can contact.\nAvatar and status URLs from user input are passed to the rendering service; ensure input comes from trusted sources.\nReply Rule\nDo not output any final text."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/sakullla/quotly-style-sticker",
    "publisherUrl": "https://clawhub.ai/sakullla/quotly-style-sticker",
    "owner": "sakullla",
    "version": "1.4.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/quotly-style-sticker",
    "downloadUrl": "https://openagent3.xyz/downloads/quotly-style-sticker",
    "agentUrl": "https://openagent3.xyz/skills/quotly-style-sticker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/quotly-style-sticker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/quotly-style-sticker/agent.md"
  }
}