Skip to content

Troubleshooting

A consolidated index of every "something looks wrong, what now" path. The matrices in installation / setup-menu / support also live here so you can search one page instead of three.

Start here: open /setup → ℹ️ About in your group. The four lines on that screen (chat ID, plan, schedule, project name) are what support needs to triage. Copy them before you do anything else.

Self-diagnosis flow

Run through these questions in order. Most issues resolve at one of the first two checks.

1.  Does the bot reply to /setup at all?
    ├─ No  → bot was kicked or demoted from admin → re-promote and retry
    └─ Yes → continue.

2.  Does /setup → 📊 Reports → ⚡ Generate report now produce a post
    within 3 minutes?
    ├─ No DM, no post                  → check matrix in §"Reports not arriving"
    ├─ DM "no posts found"              → see §"Filter / no posts"
    ├─ DM "credit exhausted"            → see §"Billing & credits"
    ├─ Post landed but renders wrong    → see §"Render quality"
    └─ Post landed correctly            → you're fine.

3.  Are scheduled reports arriving on time?
    ├─ No  → see §"Schedule not firing"
    └─ Yes → all good.

4.  X Posts Auto-relay issues?
    └─ See §"X Posts Auto-relay"

If none of the matrices below land you on a fix, scroll to Escalation.

Reports not arriving

SymptomLikely causeFix
Bot was active before, suddenly silentBot was demoted from admin / kicked silentlyTelegram → group admins → re-promote. If still silent, contact support — the auto-disable on chat-gone may have triggered.
Manual generate-now produces nothingBot is admin but has zero credits/setup → 💳 Buy Credits. If FREE "100/100 used" — wait for monthly reset (1st of month UTC). If PRO·credits with REMAINING=0 — chat already auto-downgraded to FREE; /setup → 💳 → 💰 Buy to top up.
Manual generate-now: "no posts found" admin DMFilter too narrow OR no posts in window/setup → 🎯 Filters. Check the literal X API query for typos. Try widening or dropping the period.
Image renders but text emptyAI commentary timed outRe-run; transient. Persistent = contact support.
Image fails to render entirelyTransient rendering hiccupRe-run. If repeatedly failing for one chat, contact support with chat ID.
Error "Unauthorized" / "Forbidden" in admin DMX API token issue (operator-side)Contact support; nothing the user can fix.

Filter / no posts

SymptomLikely causeFix
Report shows "0 posts" everywhereFilter doesn't match anything in the configured periodStep 1: /setup → 🎯 Filters — confirm the query. Step 2: /setup → 📊 Reports → 🗑 Clear period (rolling 24h is more forgiving). Step 3: widen filters (add a cashtag fallback, drop strict keyword groups).
Leaderboard shows users I didn't add to the filterFilters are additive — anyone tweeting a tracked cashtag/keyword countsTo require both an account and a cashtag, use /set_x_filtering name from:@x cashtags:$Y (named filter, AND-of-categories).
Same user spammed leaderboardBot legitimately scored every post/setup → 🎯 Filters → 🙈 Ignore → ➕ Add @spammer — they're dropped from results post-fetch.
Cashtag with weird characters not matchingX API normalizes case; trailing/leading spaces matter in filter inputRe-add via /setup → 🎯 Filters → 💵 Cashtags → ➕ Add → no $ needed, no spaces.
Number-prefixed cashtag (e.g. $1INCH) isn't trackedX API search behavior with leading numbers can be inconsistentUse as a keyword instead of a cashtag: "$1INCH" in 🔍 Keywords with quotes.
"Best Tweet" pick seems offAI deduplication recently picked a similar tweetWait one cycle. Persistent off-feel = report it; the prompt is tunable.

Schedule not firing

SymptomLikely causeFix
Schedule "rejected" with FREQUENCY_ERRORCron tries to fire more often than every 12hSpacing check enforces ≥ 12h gaps. The error message names the offending hour pair. Pick a wider gap.
Schedule set, but report didn't arrive on timeScheduled cron fires within ~1–2 min of the tickWait 5 min after the configured time before assuming a miss. Rare upstream delays happen but resolve themselves.
Multi-fire cron only fires onceHour list out of order or duplicatecron(0 14,22 ? * * *) — ascending hours. cron(0 22,14 ? * * *) is rejected.
Schedule on staging fires every 5 min, prod doesn'tDifferent RULE_NAME namespaceConfirm you're checking the right environment. /setup → ℹ️ About shows env.
Time zone seems wrongSchedule is UTC by designConvert your local time to UTC. The set-schedule input also accepts named timezones in some edge cases — check the entry's docstring.
X Posts Auto-relay fires but reports don'tDifferent cron schedulesX Posts Auto-relay uses a 5-min poll per relay; reports use the chat's main schedule cron (typically daily). They're independent.

Render quality

SymptomLikely causeFix
Custom title / color reverted overnightCache invalidated, next fetch shows the new valueWait one report cycle (~1 day). The render cache rebuilds on the next fetch.
Logo blurry / croppedSource image too small or non-squareRe-upload at ≥ 512×512 PNG, square aspect. /setup → 🎨 Customization → 🖼 Logo.
Username overflows in the leaderboard imageLong display nameBot truncates with ellipsis; no fix needed unless persistent.
Best-tweet text shows raw <a href> HTMLTelegram parse mode mismatchBug — please report with the tweet URL.
Different report image vs Telegram previewTelegram caches the first image bytes by URL; presigned URLs include a timestamp so each fetch is uniqueShould not happen; if it does, rotate via /recreate.

X Posts Auto-relay

SymptomLikely causeFix
Relay forwards a 6-tweet thread at onceSelf-replies bypass X API's exclude=replies/setup → 📡 X Posts Auto-relay → @account → toggle ☐ Thread continuations off. Bot then keeps only the head.
Relay stopped mid-dayDaily cap reachedPer-relay screen shows Today: N/N forwarded. Tap ✏️ Cap and raise. Resets at midnight UTC.
Relay shows ⏸ Paused but I never paused itAuto-paused on Telegram chat-gone (kicked / blocked / chat upgraded)The bot also stopped the polling schedule. To restore: /setup → 📡 X Posts Auto-relay → @account → ▶️ Resume. If still failing, the chat itself may have changed ID (super-group upgrade) — re-add the bot in the new chat.
Relay's first poll forwarded 50 postsBootstrap shouldn't do this — only seed the LAST_POST_ID without forwardingIf you see this, please report. The fix added in 2026-04 should prevent it.
Quote tweets keep appearing despite the toggleX API has no server-side exclude=quotes — bot filters client-side post-fetchToggle works, but you still pay for the quote tweets returned by the API. Cosmetic-only saving.
Relay polls forever despite chat being deletedOld-version relay — auto-cleanup added 2026-05Ask support to force-stop the relay. New deployments self-clean.

Billing & credits

SymptomLikely causeFix
Bought credits, balance unchangedStripe webhook delayedWait 5 min. If still wrong, contact support with Stripe receipt + chat ID.
Credit count higher than I expectedA relay polled multiple times during a period when the tracked account was activeX Posts Auto-relay charges per post. Tap relay → check Today counter.
Overage charge on PRO·sub even though I posted littleOther usage on the chat (relays, reports, fetch retries)/setup → 💳 Buy Credits → Usage this month. Compare against the metered charge.
FREE chat chargedShouldn't happen — FREE has no Stripe customerReport immediately; this is a billing bug.
Subscription shows "canceled" but I didn't cancelStripe cancellation can be triggered by failed card auto-renewCheck email for Stripe receipts, update card via /setup → 💳 → 🛠 Manage subscription (Stripe Customer Portal).
Cancelled subscription, still PROCancel-at-period-end: PRO until end of paid periodExpected. Reverts to FREE at the next billing cycle's end.

Public dashboard

SymptomLikely causeFix
Project not on xbot.ninjaDoesn't meet thresholds (≥ 300 top score, ≥ 5 posts, ≥ 2 active users this month)Direct URL still works. Wait for the metric to reach the threshold. Solo-KOL setups are intentionally hidden from the showcase.
Project on xbot.ninja but logo missingLogo never uploaded, or upload failed/setup → 🎨 Customization → 🖼 Logo. Send a square PNG.
Public URL shows old project nameRefresh on next report cycleRename via /setup → 🎨 Customization → 🏷 Name. URL slug + card refresh once the next report fires.
URL gives 404Chat has been hard-deleted, OR thresholds not met yet so showcase hides itConfirm chat ID via /setup → ℹ️ About. Test the direct URL https://xbot.ninja/?chatId=<id>.

Escalation

When matrices above don't resolve, contact support with the template below.

Project:        <your project name>
Chat ID:        <from /setup → ℹ️ About>
Plan:           FREE / PRO·credits / PRO·sub
What's wrong:   <1–2 sentences>
What you tried: </setup → … → … steps you ran>
When it broke:  <approx UTC time>
Recent change:  <any new filter / schedule / payment in the last 24 h>

The chat ID alone gives support 80% of triage information — please always include it.

Where to send:

Response times by severity:

  • Critical (bot offline platform-wide, billing failures): 1 business hour during EU+US business overlap
  • High (one chat's report not delivering): same business day
  • Normal (feature questions, configuration help): 1–2 business days

Useful diagnostics commands

CommandWhat it shows
/setup → ℹ️ AboutChat ID, plan, schedule, project — copy this verbatim into support
/setup → 🎯 FiltersLiteral X API query string
/setup → 💳 Buy Credits → 📊 Usage this monthDaily + monthly fetched_posts counters — spots silent failures (high attempts, zero posts → likely 402s)
/setup → 📡 X Posts Auto-relay → @accountPer-relay state (active / paused, today's forwards, daily cap)
/get_chatidJust the chat ID (one-liner if About is overkill)

Where to go next

X Bot Documentation