Pack management and fleet minting
Pack management and fleet minting
/mypacks lists every pack you've created, 10 per page. Each one opens a detail card with 6 buttons for editing, adding to, sharing or deleting it.
The pack list
/mypacks, or Back from a detail card, opens the list. Title: "Your packs." With no packs: "No packs yet. Send /emojipack to make one."
| Setting | Value |
|---|---|
| Packs per page | 10 — one button per pack, labelled with its title, plus a pager row and a Close button. |
The detail card
Tapping a pack shows its title, then every emoji in the set rendered inline as real custom-emoji entities, up to 100. Beyond that, the card appends " +N more" instead of rendering the rest.
The 6 detail-card buttons
| Button | Behaviour |
|---|---|
| Copy pack | A direct link button, not a callback — opens https://t.me/addemoji/<set_name>. |
| Edit Pack Name | Bot asks "Send the new name." Your reply is truncated to 64 characters; the card re-renders in place with the new title. |
| Add New Emojis | Re-opens the three-mode chooser, scoped to this pack: "Add to this pack. A coin flip, an emoji from an image, or existing emojis?" |
| Delete pack | Starts the two-tap delete below. |
| Back | Returns to the pack list. |
| Close | Ends the session and deletes the wizard message. |
Two-tap delete
Deleting a pack
- Tap Delete pack on the detail card. It rewrites to
Delete "<title>"? Removes it for everyone. No undo.with two buttons: Delete pack and Back. - Tap Delete pack again to confirm. Back returns to the detail card unchanged.
A Telegram response containing "not found" or "invalid" is treated as a successful delete, so a pack whose Telegram set is already gone can still be cleared from your list.
Pack indices are list positions
Renumbering on delete
Each pack's callback data carries a numeric index — its position in your append-only pack list, nothing more permanent than that. Deleting a pack shifts every pack after it down one position immediately. There is no stable, persistent pack id in the button data.
Fleet minting
Every set operation — create, add, rename, delete, and the Existing Emoji create/add — is routed to a shared fleet of bots rather than always using the bot you are talking to. Telegram's own pack limits apply per bot, so creates and edits ride whichever fleet bot currently has headroom; if none is available, or the request fails, the wizard falls back to building with your own bot's token instead.
What this means for you
| Setting | Value |
|---|---|
| The pack's owner bot | May be a different bot than the one you sent /newpack to. The set's short name always ends by<that bot's username>. |
| Set name format | e<8 hex characters>by |
| Editing later | Set edits are creator-bound forever — only the fleet bot that originally created a set can rename, add to, or delete it again. There is no expiry on that binding. |
Cloning existing emoji
The Existing Emoji mode's create and add-more actions re-submit each pasted emoji's Telegram file id into the new or target set — no image bytes are uploaded. This is capped at 200 stickers per set: the first 50 go into the initial createNewStickerSet call, and the rest are appended one at a time — the same shape whether a fleet bot or your own bot ends up minting it.
A separate clone mechanism exists elsewhere in the codebase
Outside the Telegram wizard there is a second, independent implementation of custom-emoji cloning, with a different effective ceiling — 200 stickers when resolving directly by file id, 70 when it goes through a batched create-then-add path instead. Which of the two ceilings applies to a given non-wizard action was not determined, so no single "clone cap" number is published here for that mechanism.
The coin studio on the web
/dashboard/emoji-design opens a two-tab studio: Banner and Coin Emoji. The Coin Emoji tab offers 2 spin styles, 6 colours, 7 textures and 21 finish-toggle…
The banner creator
The banner creator builds an animated Telegram custom-emoji strip out of text, images and named motion presets. It is a web-dashboard tool; nothing about…