Install
openclaw skills install quotly-style-stickerGenerate QuotLy-style stickers from forwarded messages and return one MEDIA path for auto-send. Use when users ask to create quote stickers from selected for...
openclaw skills install quotly-style-stickerselected_messages.context.event.channel (example: telegram)context.event.update_id (preferred)event_id, delivery_id, idpython3 scripts/openclaw_quote_autoreply.py --input <json-file-or->MEDIA: for delivery.selected_messages (array, must not be empty)context.event for dedupe accuracy
channel (string)update_id (string or number, preferred)event_id / delivery_id / id (fallback keys){
"message": {
"message_id": 2002,
"text": "Forwarded message content",
"forward_from": {
"type": "hidden_user", // optional, indicates hidden user
"id": 123456789, // optional, user id
"first_name": "张", // required, first name or nickname
"last_name": "三", // optional, last name
"avatar_url": "", // optional, avatar url or base64 data (from user profile or platform API)
"status_url": "" // optional, status url or base64 data (from user profile or platform API)
}
},
// Optional: override message fields
"overwrite_message": {
"text": "哈哈哈哈哈",
"forward_from": {
"avatar_url": "", // from user profile or platform API
"status_url": "" // from user profile or platform API
},
"entities": [ // optional, text formatting entities
{"type": "bold", "offset": 0, "length": 4},
{"type": "italic", "offset": 5, "length": 4}
]
}
}
width, height, scale, max_width, border_radius, picture_radius, background_colorThe skill supports Telegram-style message entities for text formatting:
[
{"type": "bold", "offset": 0, "length": 5},
{"type": "italic", "offset": 6, "length": 6},
{"type": "url", "offset": 13, "length": 15, "url": "https://example.com"}
]
Supported types: mention, hashtag, cashtag, bot_command, url, email, phone_number, bold, italic, underline, strikethrough, spoiler, code, pre, text_link, text_mention, custom_emoji
Entity fields:
type (required) - entity typeoffset (required) - UTF-8 offset in textlength (required) - UTF-8 lengthurl (optional) - for text_link typeuser (optional) - for text_mention typelanguage (optional) - for pre typecustom_emoji_id (optional) - for custom_emoji typeoverwrite_message.text > message.textoverwrite_message.forward_from > message.forward_fromoverwrite_message.entities > message.entities > message.caption_entitiesQuote sticker generated.MEDIA:<absolute-path-to-webp>MEDIA: line is emitted.QUOTLY_API_URL - QuotLy API endpoint (default: https://bot.lyo.su/quote/generate).QUOTLY_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.QUOTLY_AUDIT_LOG - Set to 1, true, or yes to enable audit logging to stderr.QUOTLY_DEDUP_WINDOW_SECONDS - Suppress duplicate requests for the same event/payload within this window (default: 180). Set to 0 to disable._build_dedupe_key reads input)_build_dedupe_key(input_payload) resolves keys in this order:
context.event.update_id (or event_id / delivery_id / id)event.update_id (or event_id / delivery_id / id) when context.event is missingcontext.event.update.update_id (nested update object)selected_messagesRecommended wrapper payload:
{
"context": {
"event": {
"channel": "telegram",
"update_id": 123456789
}
},
"selected_messages": [
{
"message": {
"message_id": 2002,
"text": "Forwarded message content"
}
}
]
}
.. and suspicious path patternsQUOTLY_AUDIT_LOG=1 to log API requests and responses for security monitoringQUOTLY_API_ALLOW_HOSTS to restrict which hosts the skill can contact.