All limits in one place
Every hard limit documented elsewhere in this manual, gathered in one place and grouped by feature. Three deliberately unpublished non-limits: no display-name / bio / description character cap was found anywhere; the /menu Manage Groups picker has no group cap (only the buy bot’s separate pool does); pollSeconds has no reader and is treated as vestigial.
Menu, groups & authorization
| Limit | Value | Notes |
|---|---|---|
| Commands per Telegram menu scope | 100 | telegramCommandsLimit, applied to each of the three default setMyCommands scopes. |
| Memoised owner-menu records | 500 | MAX_MENU_SCOPES — oldest dropped first (FIFO). |
| Manage Groups / buy-bot-groups picker scan | 40 groups | MAX_GROUP_CHECKS — the live admin-status recheck stops here; groups beyond it can’t appear as a fresh row, though an already-allowedGroups entry still shows as an “extra” ✅ row. |
| Group title shown on a picker row | 48 characters | |
| DM-authorized usernames | 50 per bot, ^[a-z0-9_]{5,32}$ | Dashboard-only — Groups tab → Authorize A DM. No Telegram command creates one. |
General group allowlist (allowedGroups) | No cap found | Neither the dashboard nor /menu’s Manage Groups picker passes a limit — do not repeat HELP_TEXT’s 10-group figure here, that cap belongs to the buy bot’s own pool below. |
| Buy bot’s posting-target pool | 10 — separate from the allowlist above | See Buy bot, below. |
Buy bot
The Enforced/Notes column names the surface that applies the cap — the Telegram bot process, the dashboard’s API layer, or both when the same value is checked twice.
Groups, prompts and dispatch
| Limit | Value | Notes |
|---|---|---|
| Target groups per bot | 10 | MAX_TARGETS (bot) / MAX_TARGET_GROUPS (dashboard). /enablebuybot and the dashboard’s group patch both refuse an 11th with Limit reached, we're already in 10 groups. Remove a group first… |
| Prompt TTL | 600 s (10 min) | A pending settings or fork-wizard prompt is rejected once it’s this old. |
| Settings dispatch timeout | 20 s | The dashboard call behind every /buybotsettings action. |
| Fork dispatch timeout | 45 s | The dashboard call behind /forkbuybot. |
| Fork dispatch rate limit | 20 requests / 60 s | /api/internal/dispatch, action fork-buybot. |
| Settings dispatch rate limit | 60 requests / 60 s | /api/internal/dispatch, action buybot-settings. |
| Group-title rescan | 300 s | Manage Groups card, background reread between an explicit open or Refresh. |
| Token lookup memo | 600 s | Cached DexScreener token lookup, keyed chain:contract. |
Message content
| Limit | Value | Notes |
|---|---|---|
| Caption cap, post carries media | 1024 visible UTF-16 units | Every buy post; trailing lines that don’t fit are dropped whole. |
| Caption cap, text-only post | 4096 visible UTF-16 units | Same, when the post has no photo, GIF or video. |
| Fork source text | 8192 characters | Before the pasted post is even parsed. |
| Runs per header, and per row | 96 | headerParts, and independently for each of the 6 row keys. |
| Runs per body | 256 | bodyParts. |
| Text per run | 200 characters | Any header, body or row run. |
| Emoji-atom glyph text | 8 characters | The fallback text of a premium-emoji run. |
| Chart label | 24 characters | chartLabel, default Chart. |
| Contract address accepted | 160 characters | Any CA pasted or sent to the bot. |
Links, buttons and cards
| Limit | Value | Notes |
|---|---|---|
| Extra links | 4 | extraLinks. |
| Extra-link label | 32 characters | |
| Buttons on a post | 12 | buttons. |
| Button text | 64 characters, default Open | |
| Link display on the settings/socials card | 40 characters (37 + …) | |
| Fork “Removed:” list | 8 items, 40 characters each | /forkbuybot’s summary of stripped content. |
| Error text in a callback alert | 180 characters | |
| Error text stored or echoed | 200 characters | Settings-dispatch and fork failures. |
Buys, pools and holders
| Limit | Value | Notes |
|---|---|---|
| Max emojis in the size row | default 50, clamp 1–80 | maxEmojis. |
| USD per emoji | clamp 0.01–1e9 | usdPerEmoji. |
| Min buy | default $0, clamp 0–1e9 | minBuyUsd. |
| Watched pools per family | EVM uncapped, Solana 16, Sui 12, TON 10 | Best pools first. |
| New-holder ratio | 1000× | {POSITION} reads a percentage only up to this multiple of the buyer’s pre-buy balance; above it, and at a zero balance, it reads New!. |
| Holders cache | 300 s | The buy-post {HOLDERS} lookup, per chain:contract. |
| Posts per catch-up burst | 5 | Missed buys posted after a reconnect or restart, at most this many at once. |
| Buy staleness cutoff | 600 s | A buy older than this at catch-up time is marked seen but never posted. |
Media, outside the dashboard uploader
| Limit | Value | Notes |
|---|---|---|
| Settings-patch media (base64) | 20 MB, any 2–4 character extension | The media field of a /buybotsettings dispatch patch. |
| Fork photo | 20 MB | /forkbuybot’s attached media, at the dispatch layer. |
| Dashboard drag-and-drop upload | jpg/jpeg/png/webp 5 MB, gif/mp4/webm 20 MB | The multipart upload path, separate from the two rows above. |
Raid bot
Command and matching
Command limits
| Limit | Value | Notes |
|---|---|---|
| Goal maximum | 100,000 per metric | |
| Goal minimum | At least one metric above 0 | |
| Numeric token length | Up to 6 digits | A 7-digit token is rejected as unparseable, not as out of range. |
| Numbers per command | Exactly 1 or exactly 3 | One applies to all three metrics; three map to likes, retweets, replies in order. |
| Tweet handle length | 1–15 word characters | |
| Concurrent raids, whole bot | 8 | Refused for a new chat past this cap; a chat that already owns a raid can still replace it even at the cap. |
| Raids per chat | 1 | A new /raid replaces the running one. |
| Consecutive failed fetches before giving up | 30 | |
| Poll interval | 1 second | |
| Minimum gap between board edits | 3 seconds, and only if the text changed | |
| Board reposition interval | 120 seconds | |
| Reposition retry interval | 10 seconds | On a failed repost. |
Message and template size
| Limit | Value | Notes |
|---|---|---|
| Photo caption | 1024 visible characters | |
| Text message | 4096 visible characters | |
| Over either limit | Whole trailing lines dropped | |
| Intro / footer / end-state text | 700 visible characters | |
Board template (boardHtml) | 1000 visible characters | A board built close to this ceiling can still exceed the 1024-character photo-caption cap once rendered — the overflow drops a whole line at a time, silently. |
| Metric label | 120 visible characters | |
| Plain emoji | 16 characters | |
| Premium emoji ID | 5–32 digits | |
| Raid image | jpg, jpeg, png or webp, up to 5 MB | |
| Allowed HTML tags | b i u s code pre blockquote tg-spoiler tg-emoji a | |
| Link scheme | https:// or tg:// only | |
| Progress-bar catalog | 24 designs per bot | |
| Mint wait | Up to 12 minutes, polled every 3 seconds |
Busy reply
Sent by anyone once the bot is already running 8 raids and the sending chat has none of its own: “Too many raids running right now — try again soon.” No raid starts.
Holders & custom commands
/holders
| Limit | Value | Notes |
|---|---|---|
| Contract address accepted (dashboard save) | 256 characters, [a-zA-Z0-9._:-]+ | |
| Chains with a keyless holder source | 8 of 9 | HyperEVM has none and is permanently —; the dashboard’s chain dropdown never lists it. |
| Preferred-source wait | 2.0 s | PREFER_WAIT_S — the preferred source’s own answer window before the race falls back to whichever source answers first. |
| Hard wait | 6.0 s | HARD_WAIT_S — gives up if nothing has answered by then. |
| Dispatch lane timeout | 6.0 s | DISPATCH_TIMEOUT_S, for the CoinGecko leg specifically. |
| Result cache | 15 s per chain-and-address pair, single-flighted | |
| Warm-refresh window | 600 s since the last ask | ACTIVE_WINDOW_S — outside it, an idle bot asks the free sources nothing. |
Custom commands — button board
| Limit | Value | Notes |
|---|---|---|
| Buttons per command | 12 max | The Add Button control disables at the cap. |
| Label length | 64 characters | |
| URL scheme | https:// only | A bare host is auto-normalised; an explicit http:// is rejected on save. |
| Colours | 4 | Gray (default), Blue, Green, Red. |
| Layout | Horizontal or Stacked | Stacked is the default. |
| Premium-emoji icon id | 5–32 digits | Anything else is silently dropped when the live config is built. |
Custom commands — per-command and API
| Limit | Value | Notes |
|---|---|---|
| Visible reply length | 4096 characters | Telegram’s own cap, measured after HTML tags are stripped and entities collapsed to 1 character each. |
| Stored markup size | 64 KiB (65,536 characters) | Of raw response markup. |
| Batch create | 50 commands per API call | An items array on the create action. |
| Management API rate limit | 60 requests / 60 seconds per IP | Shared across every /api/bots/management resource, not specific to commands. |
MP3 downloader, presets, reference images & queue status
MP3 downloader
| Limit | Value | Notes |
|---|---|---|
| Output | 320 kbps MP3 | Tagged with title, artist, duration; the bot’s own Telegram avatar embedded as cover art. |
| Telegram upload cap | 49 MB per track | |
| Source file cap | 600 MB | |
| Max track duration | 3 hours | |
| Single-track timeout | 300 s | |
| Concurrent downloads | 3 | Shared bot-wide across single tracks and playlists. |
| Per-user cooldown | 20 s, same user + same chat | |
| Repeat-link cache | 24 hours | Telegram’s own file_id is re-sent instantly. |
| Playlist track cap | 30 tracks | |
| Playlist timeout | 1500 s | |
| ZIP upload cap | 1900 MB | |
| Playlist choice window | 600 s | Then the prompt is deleted. |
| Bare-command hint lifetime | 45 s | Then the hint and the command are both deleted. |
Image edit presets
| Limit | Value | Notes |
|---|---|---|
| Presets | 15 | Fixed set — see the Image edit presets chapter for names. |
| Prompt idle timeout | 300 s | The bot deletes its own prompt and the original /presets message. |
Reference images
| Limit | Value | Notes |
|---|---|---|
| Reference images per character | 4 | MAX in refs.py. |
Queue & GPU status
/whoisactive, /whichport and /whichlora read a live probe every time — none of the three cache or poll on a schedule, so no numeric limit applies to them beyond the command-access rules in the table above.
Owner controls, whitelist & moderation
Rate limits and blocks (Management → User Limits)
| Limit | Value | Notes |
|---|---|---|
| Restriction durations offered | 5 — Permanent (default), 1 hour, 1 day, 3 days, 7 days | The API accepts a custom duration up to 157,680,000 s (~5 years), but no dashboard path reaches it. |
| Daily Limit minimum | 1 | Daily limit must be an integer >= 1 below it. |
| Daily Limit maximum | None | |
| Daily Limit default for a new restriction | 50 |
Twitter whitelist (Twitter bots only)
| Limit | Value | Notes |
|---|---|---|
| Handle pattern | ^[a-z0-9_]{1,15}$ | After trim, leading @ stripped, lower-cased. |
| Cap | 200 handles | The AddUsers button disables itself at the cap. |
| Adding | Bulk-paste only | No single-add path. |
Moderation
/ban and /mute carry no numeric limit of their own beyond the fixed 24-hour mute duration and the single Admin Moderation switch that gates both — see the command table for who may send them.
X automations
Every hard number across feed, phrase and follow-tracker automations, recap, posts on demand, follower lists, contract-address cards, and forum topics.
Automations and rules
| Limit | Value | Notes |
|---|---|---|
| Automations per bot | 10 | Every plan. |
| Rules per entry | 8 | phrase and follow only. |
| Rule value | 0 – 1,000,000,000,000 | Ratio rounds to 2 decimal places; every other kind is floored. |
| Rule tolerance | 0 – the entry’s own rule count | Clamped to the rule count on save. |
ca rule wait (follow only) | 8.0 s | Judged instantly on a phrase entry — no wait. |
| Buttons per entry | 12 | feed/phrase only. |
| Button style options | 3 | primary, success, danger. |
| Button label | 64 characters | Hard-truncated, not rejected. |
| Custom-emoji button icon id | 5–32 digits | |
| Message / link label / recap row / recap header | 500 characters each | Rejected over, not truncated. |
| Phrase length | 120 characters | |
| Handle | 1–15 letters, digits, underscore | |
| Minimum-followers gate ceiling | 1,000,000,000 | |
| Uploaded image | 5 MB, jpg / jpeg / png / webp |
Recap
| Limit | Value | Notes |
|---|---|---|
| Recap times | Up to 3, HH:MM, deduplicated | America/New_York, always. |
| Recap prep lead | 300 s (5 min) before each slot | One re-fetch per queued hit. |
| Recap send window | 900 s (15 min) after each slot | A missed slot is skipped, not queued. |
| Recap hits kept | 100 | Oldest dropped first. |
| Recap message split | 4000 characters per part | Header appears on the first part only. |
Feed and phrase polling
| Limit | Value | Notes |
|---|---|---|
| Feed / follow poll interval | 5.0 s | |
| Phrase poll interval | 10.0 s | |
| Feed announces per tick | 3 | The rest wait for the next tick. |
| Phrase announces per tick | 5 | |
| Follow announces per tick | 3 | Oldest first. |
| Feed ids remembered | 50 | |
| Phrase ids remembered | 300 | |
| Follow ids remembered | 1000 | Oldest trimmed first. |
| Follow arming | Up to 5 pages of the account’s Following list | Seeds the seen list before announcing anything. |
| Backoff | 30 s, doubling to 300 s (5 min) | On a 429 or a long miss streak. |
| Miss streak before backoff | 24 misses | |
| Failures before backoff | 6 failures | |
| Search results window | 100 rows per request |
Posts on demand
| Limit | Value | Notes |
|---|---|---|
| Posts per press | 5 | |
| Free-press window after a follow | 300 s (5 min) | No request inside this window. |
| Timeline page size | 20 posts | Per request. |
| Timeline pages read per later press | 4 | |
| Posts shown per card, max | 40 | |
| Post text on a card | 220 characters | |
| Post quote on a feed/phrase card | 600 characters (400 as a photo caption) | |
| Graphic render timeout | 20 s | |
| Tracked account’s own profile cache | 6 h, retried after 10 min on a miss | The graphic’s “who followed” side. |
Follower lists
| Limit | Value | Notes |
|---|---|---|
| Follower-list message | 3800 characters / 45 rows | Whichever comes first. |
| Follower-list name | 28 characters | |
| Follower-list pacing | 0.4 s between parts | |
| Follower-list flood-wait honoured | Up to 300 s, 6 attempts per part | |
| JSON-document threshold | Over 200 followers | Top 20 message + complete list as a JSON file. |
| Harvest cache | 120 s | |
| Harvest request timeout | 240 s |
Contract-address cards
| Limit | Value | Notes |
|---|---|---|
| CA announce budget (profile scan) | 1.5 s | Never waited for the search. |
| CA late-edit window | 20 s | One edit, whatever came back. |
| Tokens shown per card | 3 | |
| CA candidates remembered per card | 60 | Not re-resolved. |
Cards and topics
| Limit | Value | Notes |
|---|---|---|
| Cards kept per entry | 30 | Oldest trimmed first; rich-delivered only. |
| Bio on the rich card | 600 characters, expandable past 200 visible characters | |
| Bio on the classic card | 280 characters as text, 200 as a caption | |
| View-button name | 20 characters | Ellipsised past that. |
| Topic kinds | 3 | alerts, lists, achievements. |
| Topics remembered | 40 groups × 200 topics each | |
| Topic id | A whole number, 1 – 2,147,483,647 |
Multi-chain scanner & calls
The scanner itself
Deliberately uncapped
The scanner enforces no burst cap, no per-message cap, and no repeat cooldown — every candidate address in a message gets its own card, and pasting the same address again immediately still gets a fresh reply every time. The one place multiple mentions fold together is inside a single message, where the same address pasted twice produces one card, not two.
| Limit | Value | Notes |
|---|---|---|
| Chains recognised | 9 | See Chains and data sources. |
| Chains with a keyless holder source | 8 of 9 | HyperEVM permanently —. |
| Socials button rows | 2 per row, up to 4 | 🌐 Website · 𝕏 Twitter · ✈️ Telegram · 💬 Discord. |
| Second-website label truncation | 16 characters |
Milestone alerts
| Limit | Value | Notes |
|---|---|---|
| Thresholds | 11 — 2, 3, 4, 5, 10, 20, 40, 100, 200, 500, 1000× | CALLS_MULTIPLIERS; a multiplier is never announced twice. |
| Poll cycle | Every 15 seconds | Coins fetched from DexScreener in batches of 30 addresses per request. |
| Hot-tier recheck | ~15 s (every cycle) | Called, or a new all-time-high market cap, within the last 14 days. |
| Cold-tier recheck | 600 s (10 min) | Everything else. |
| Poll giveup | 5000 consecutive checks with no trading pair | The coin stops being polled entirely. |
The calls commands
| Limit | Value | Notes |
|---|---|---|
| Reply split threshold | 3800 visible characters per part | Sent 3.1 seconds apart; a split header gets a · part k/n suffix. |
/leaderboard windows | 4 — all time, 1d, 7d, 30d | Case-insensitive tokens; unrecognised windows get a usage reply. |
Emoji packs, banner creator, dividers & hyperlink navigation
Emoji packs
| Limit | Value | Notes |
|---|---|---|
| Spin styles (Telegram wizard) | 11 | 9 of the 11 have no described look anywhere in the codebase. |
| Colours (Telegram wizard) | 7 | No textures in this path. |
| Spin styles (web coin studio) | 2 | |
| Colours (web coin studio) | 6, plus a custom hex picker | |
| Textures (web coin studio) | 7, plus Auto | |
| Finish toggle groups (web coin studio) | 9 groups, 21 options, plus a 50–200% animation-speed slider in 5% steps | |
| DM-resolvability cache | 600 s | A successful check is not repeated within the window. |
| Packs listed per page | 10 | |
| Emoji rendered inline on a pack’s detail card | 100 | Beyond that: +N more. |
| Edit Pack Name reply | Truncated to 64 characters | |
| Existing Emoji clone cap (Telegram wizard) | 200 stickers per set | First 50 in the initial create call, the rest appended one at a time. |
| “No, surprise me” title | 49 characters + - @memescaleai = 64 total |
Banner creator
| Limit | Value | Notes |
|---|---|---|
| Tiles per banner | 8 (512 × 512 px each) | 4096 × 512 px master, no configurable pack-size maximum. |
| Default loop length | 1.2 s (72 frames at 60 fps) | Unless the design’s own bake reports otherwise. |
| Banner text / second text (Two-Text) | 24 characters each | |
| Pack name (Export) / save-design name | 48 characters each | |
| Image upload (From Files) | 4 MB | |
| Lottie JSON upload | 4 MB | |
Font upload (.ttf / .otf) | 3 MB | |
| Saved designs per account | 200 | |
| Saved design spec size | 16,384 bytes | spec too large over it. |
| Concurrent packs generating, same account | 4 | |
| Global pack queue, whole platform | 48 | |
| Pack job timeout | 45 minutes | |
| Tile size ceiling (Telegram) | 64 KB per tile |
Dividers
| Limit | Value | Notes |
|---|---|---|
| Visible presets | 25 | 31 families exist in the catalog; 6 more are retired (hidden, not deleted). |
| Colours | 17 | Default selection: Red. |
| Cells — Commands / Raid / Automations picker | 11 | |
| Cells — hyperlink navigation | 12 | Resolved from a second catalog, divider-catalog-12.json — 41 families, 30 colours, none exposed in the ordinary picker. |
Hyperlink navigation
| Limit | Value | Notes |
|---|---|---|
| Builder steps | 5 | Website URL, Buckets, Link selection, Preset, Command. |
| Live presets | 3 | white (17 colour variants), white-theme (17), diamonds (14 material variants). |
| Selectable buckets | 1 of 6 | Only Socials — the other five show a “Coming soon” pill. |
| Link cap | 6 | The active configuration allows up to 8, but the compiled cap of 6 always wins. |
| Custom-emoji ceiling | 100, configurable 1–no max | Over it, divider rows drop bottom-up until the message fits or every divider row is gone; link rows and the banner row never drop. |
| Site-discovery storage | Up to 1,000 platform groups × 100 candidates each | Independent of the 6-link cap, so an edit can reopen every original candidate. |
| Detection rate limit | 12 scans / 60 s per IP | No exemption for paying accounts. |