Skills tg-stickers
Collect and send Telegram stickers smartly. Auto-import packs, tag by emotion, select contextually, and respect frequency limits (2-5 messages).
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bangyizhang/tg-stickers" ~/.claude/skills/openclaw-skills-tg-stickers && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/bangyizhang/tg-stickers" ~/.openclaw/skills/openclaw-skills-tg-stickers && rm -rf "$T"
manifest:
skills/bangyizhang/tg-stickers/SKILL.mdsource content
Telegram Stickers Skill
Intelligently manage and send Telegram stickers with emotional awareness.
Core Value
OpenClaw natively supports sending stickers (
message tool), but this skill adds:
- ✅ Collection management - Import entire sticker packs at once
- ✅ Emotion tagging - 100+ emoji → emotion mappings
- ✅ Smart selection - Context-based + randomization (avoid repetition)
- ✅ Frequency control - 2-5 messages between stickers
- ✅ Usage analytics - Track which stickers work best
Quick Start
1. Import Sticker Packs
./import-sticker-pack.sh <pack_short_name_or_id>
2. Auto-Tag by Emotion
./auto-tag-stickers.sh
3. Send Stickers (in agent code)
// ✅ Use OpenClaw's message tool directly message(action='sticker', target='<chat_id>', stickerId=['<file_id>']) // No bash script needed - OpenClaw handles sending natively
4. Smart Selection
./random-sticker.sh "goodnight" # Returns random sticker tagged "goodnight"
Tools
| Script | Purpose | Usage |
|---|---|---|
| Bulk import Telegram sticker pack | |
| Tag stickers by emoji → emotion | |
| Select random sticker by tag | |
| View collection stats | |
Agent Integration
## Sticker Usage When to send: - Goodnight/morning greetings (always use sticker over text) - Celebrating success/milestones - Humorous moments - Emotional responses (joy, sympathy, encouragement) How to send: 1. Use random-sticker.sh to pick appropriate sticker by emotion 2. Call message(action=sticker, ...) directly 3. (Optional) Update stickers.json manually to track usage Frequency: 2-5 messages between stickers (track in agent logic)
Emotion Tags
Auto-tagging maps 100+ emoji to emotions:
😊😄🥳happy
😢😭😔sad
❤️💕😍love
😂🤣😆laugh
🤔💭thinking
🌙💤😴goodnight
☀️🌅goodmorning
,warm
,gentle
, ...greeting
File Structure
tg-stickers/ ├── SKILL.md # This file ├── README.md # Quick start guide ├── stickers.json # Collection + usage data ├── stickers.json.example # Empty template ├── import-sticker-pack.sh # Bulk import ├── auto-tag-stickers.sh # Emoji → emotion ├── random-sticker.sh # Context-based selection └── check-collection.sh # Stats viewer
stickers.json Structure
{ "collected": [ { "file_id": "CAACAgEAAxUAAWmq...", "emoji": "🌙", "set_name": "pa_dKjUP9P2dt4k...", "added_at": "2026-03-06T23:31:00Z", "tags": ["goodnight", "sleep", "night", "warm", "gentle"], "used_count": 3, "last_used": "2026-03-07T00:24:00Z" } ], "usage_log": [ { "file_id": "...", "sent_at": "2026-03-07T00:24:00Z", "context": "User saying goodnight", "message_id": "2599" } ], "stats": { "total_collected": 124, "total_sent": 15, "last_sent_at": "2026-03-07T00:24:00Z", "messages_since_last_sticker": 0 }, "config": { "min_messages_between_stickers": 2, "max_messages_between_stickers": 5, "enabled": true } }
Usage Philosophy
Like a human:
- Stickers enhance emotion, don't replace words
- Use sparingly but meaningfully
- Goodnight/morning → always sticker preferred
- Celebrations, humor, empathy → good use cases
- Technical answers, data reports → skip stickers
Frequency:
- Default: 2-5 messages between stickers
- Special occasions (greetings) override frequency rules
- Track in
messages_since_last_sticker
Example: Goodnight Flow
# 1. Agent detects "goodnight" intent # 2. Select random goodnight sticker FILE_ID=$(bash /path/to/random-sticker.sh "goodnight") # 3. Send via OpenClaw (from agent code) message(action=sticker, target=<chat_id>, stickerId=[$FILE_ID]) # 4. (Optional) Track usage manually jq --arg fid "$FILE_ID" \ '(.collected[] | select(.file_id == $fid) | .used_count) += 1' \ stickers.json > stickers.json.tmp && \ mv stickers.json.tmp stickers.json
Philosophy: Stickers should feel natural, not robotic. Collect user preferences, rotate selections, and respect conversation flow.