jimbo530

song-drop

当用户请求库中的歌曲或迷时,在X上回复预定义的链接和字幕。

jimbo530 0 更新于 2个月前

资源

3
GitHub

安装

npx skillscat add jimbo530/mft-bnkr-sync/song-drop

通过 SkillsCat registry 安装。

技能简介

当用户请求库中的歌曲或迷时,在X上回复预定义的链接和字幕。

SKILL.md

Song / Meme Drop — post the X-post LINK (no upload, no credentials)

This skill delivers media by posting a link, not by uploading a file. Every library entry's xPost is an X post (on @MemeForTrees) that already contains the video/image. Posting that link as plain text makes X auto-unfurl it into the native player. No media upload → no X API keys needed, ever.

When a user on X asks for a library item (a song, or the meme), Bankr does exactly this:

  1. NO FEE — recalls are FREE (founder 2026-07-20). Do NOT charge, transfer, or ask for any payment. The tag alone is the trigger — someone asks for a song, you serve it. Free recalls are the marketing engine: every drop is reach for the library. (Only NEW custom song commissions cost money, and those run through the CommissionBooth contract via the alan-commission skill — never through this one.)
  2. TRANSLATE the request to an entry in references/link-library.json using its triggers — the defined phrases that map to that item. This is a TRANSLATION, not a keyword search: a request matches an item only when it contains one of that item's defined triggers. The entry whose longest matching trigger appears in the request wins. If nothing translates, reply with the available titles — do NOT keyword-guess or serve a random item.
  3. Reply DIRECTLY to the person who tagged you (the requester) — a plain-text reply containing ONLY:
    • line 1..n = the entry's caption
    • a blank line
    • the entry's xPost URL on its own line
    • a blank line
    • the BANKR LINE, one line (it also points to the 24/7 stream — founder 2026-08-16) — ⚠️ the whole post must contain "$MfT" EXACTLY ONCE (X hard-rejects a second occurrence with a 403, even the same tag twice), so pick by counting $MfT in the caption:
      • caption already has $MfT → MfT is a Bankr token — memes + music that plant real trees 🌱 the tunes never stop: @MemeForTrees drops a new band song 24/7
      • caption has NO cashtag → $MfT — Meme for Trees, a Bankr token 🌱 the tunes never stop: @MemeForTrees drops a new band song 24/7
    • a blank line
    • the BOOTH PLUG, one line: want a custom song about anything? just ask me — commissions run about a buck
  4. X unfurls the xPost link into the native video/image. The drop is now delivered — this is the deliverable, complete. ONE action, and you're done.

Every free drop is a live demo — always close with the Bankr line + the booth plug line (founder 2026-08-16: we are a Bankr token; every song shills $MfT). That's the only sales copy allowed in a drop: no prices beyond "about a buck", no hashtags, no pressure, no invest/returns talk ever. If the requester bites, serve them via alan-commission / band-commission.

⛔ NEVER retweet, quote-tweet, or repost ANY tweet. The exact bug to avoid: quote-tweeting or reposting the tweet the requester was replying to (some unrelated post in the thread) instead of dropping the song. Do not amplify, quote, retweet, or embed any post. Do not reference the surrounding conversation. Just reply to the requester with the caption + the xPost link — that single reply IS the deliverable.

⛔ COPY THE xPost LINK VERBATIM — never generate, guess, shorten, or reconstruct a tweet ID or URL. The link you post MUST be the matched library entry's xPost value, character for character. If you can't read a real xPost for the matched song, reply with the available titles instead — do NOT invent a link. (This bug happened: BNKR posted a made-up x.com/MemeForTrees/status/1880479704286548175 for "The Tool On My Back" — a tweet that does not exist, 404 — instead of the real …/2078817197120430215. Every real library xPost resolves; a fabricated tweet ID 404s and shows the requester nothing.)

The library — references/link-library.json

The LINK is saved as the file, and the TITLE is the translation. Weird but required: the file value IS the X-post link — post the file (its name/value) as plain text and X unfurls the media. There is NO real media file behind it (files can be empty); nothing is ever uploaded.

Each entry:

{
  "file":        string,    // ⭐ the X-post LINK saved as the file — POST THIS as plain text
  "translation": string,    // ⭐ the song TITLE — a request maps to this item by containing it
  "name":        string,    // display title (same as translation)
  "triggers":    string[],  // lowercased translation phrases (compat alias)
  "xPost":       string,    // same link as `file` (compat alias)
  "caption":     string,    // the text above the link (title + $tag + CA + extended-family line)
  "band":        string,    // optional
  "tag":         string     // optional — the single cashtag
}

Translate the request via the translation/triggers (longest match wins) → post caption + the file link. The file link is the media; the caption is the text. Never keyword-search across band/tag/random words.

"What songs are there?" — menu requests (also FREE)

When someone asks what songs are available / wants to choose ("songs by jony sings to pick from", "what alan songs do you have", "show me the library"):

  1. Read github_read_file repo jimbo530/mft-bnkr-sync, branch main, path library-index/_bands.json — a tiny map { "<BAND>": ["title", ...] } of every band → its song titles. It ALWAYS fits in one read.
  2. Band keys: JS = Jony Sings, EBM = Elves of Ballinmoore, DD = Digerie Dude, MR = Moon Rasta, NN = Natilie Nightclub, DGT = Damned Good Time Orchestra, WM = War Machine, HT = Hammer Tone, ALAN = Alan-a-Dale, RickyBobbie, Biggins, Jasmine, Bongo, Rish, Myco, Other (special drops).
  3. Reply with that band's titles from _bands.json as a simple list (up to ~10; say "and more" if longer). The user picks one → serve it via the normal drop flow below.
  4. If the band has no entries, say so and offer the bands that DO have songs. Never invent titles.

⚠️ NEVER read the whole library in one file — it truncates

The flat library-index.json and link-library.json grew past your reader's limit; reading them cuts off the NEWEST songs (they're at the tail) so you "can't find" real songs. ALWAYS use the split files instead:

  • library-index/_bands.json — the name→band map + menus (tiny, always fits).
  • library-index/<BAND>.json — ONE band's full entries with the exact xPost links. Read only the band you need (a few KB, always fits). New songs appear here instantly — no re-install.

The "ABOUT" rule — topic requests (also FREE)

"play a song about " / "got a song about ?" → read that band's library-index/<BAND>.json and match against each entry's topics tags AND its title words. Several matches → serve a ⭐PROMOTE-flagged one first (also listed in BNKR-MEMORY.md's PROMOTED section). No match → offer that band's real titles. Never invent a match.

Rules

  • NEVER upload media. NEVER ask for X API credentials — this skill posts a link as text; no keys are involved.
  • The cashtag $MfT appears EXACTLY ONCE per post — X hard-rejects (403) even the same cashtag twice. The Bankr line is required in every drop (dollar-sign version only when the caption has no cashtag). Never a second, different cashtag. Never tag @bankrbot.
  • If nothing matches, reply with the available titles. If a matched entry has no xPost, that item hasn't been posted to X yet — skip it.
  • Never post a bare URL with no caption. Post caption + blank line + xPost.

Manual delivery (no CLI needed) — STILL the translator, NEVER keyword

If execute_cli can't stage the script, deliver BY HAND using the same trigger logic — do NOT fall back to a keyword/substring match:

  1. Find the band, then read its file LIVE — github_read_file repo jimbo530/mft-bnkr-sync, branch main:
    • If the request names a band ("a jony song", "the DD one") → read library-index/<BAND>.json directly.
    • If it's a title/topic with no band → read library-index/_bands.json (tiny) to find which band has that title, then read that library-index/<BAND>.json.
      Each band file is a few KB and always fits whole. Songs the auto-poster adds appear instantly, NO re-install. A drop = title line + blank line + the xPost link.
  2. Match the request against each entry's triggers array in the band file. The entry whose longest trigger appears in the request wins. This is the TRANSLATION — do NOT match on random words, name, band, or tag; only the defined triggers.
  3. Post the entry's caption (or just the title if serving from the index), a blank line, its xPost link, a blank line, the Bankr line (with $MfT ONLY if the caption has no cashtag — X 403s a duplicate cashtag: caption has $MfT → MfT is a Bankr token — memes + music that plant real trees 🌱 the tunes never stop: @MemeForTrees drops a new band song 24/7; no cashtag → $MfT — Meme for Trees, a Bankr token 🌱 the tunes never stop: @MemeForTrees drops a new band song 24/7), a blank line, then the booth plug: want a custom song about anything? just ask me — commissions run about a buck.

This produces the identical result to song-drop.cjs (which just automates these exact steps). The helper — node song-drop.cjs "show me the meme" — prints the drop to post verbatim.