Appearance
The /setup menu β
The fastest way to configure X Bot is the interactive /setup menu. It wraps every admin command behind a clickable, edit-in-place interface β no slash commands to memorise.
Quickest path: add the bot to your group, type
/setup, tap π Quick Start, and follow four prompts. You'll have a daily-report schedule running on a real filter in under two minutes.
What /setup looks like β

ββββββββββββββββββββββββββββββββββββββββββββββββ
β βοΈ Bot Setup β
β β
β Pick a section. Settings save instantly. β
β β
β Current state β
β β Project: MyToken β
β β Filter: 3 keywords Β· 2 cashtags β
β β Schedule: daily 18:00 UTC β
β β Plan: FREE β 47/100 credits left β
β βββββββββββββββββββββββββββββββββββββββββββββββ£
β [ π Quick Start ] β
β [ π― Filters ] [ β° Schedule ] β
β [ π Reports ] [ π¨ Customization ] β
β [ π₯ Admins ] [ π³ Buy Credits ] β
β [ βΉοΈ About ] β
β [ β Close ] β
ββββββββββββββββββββββββββββββββββββββββββββββββEvery screen shows your current state at the top so you know what's configured before you change anything. Every change saves instantly to the database β there's no "save" button to forget.
Quick Start wizard β
Tap π Quick Start for a four-step linear flow that gets a fresh chat from "nothing configured" to "first scheduled report" with the minimum number of prompts. Skip and Exit are always available β a partly-completed wizard never blocks you, settings just stay at their defaults.

The four steps:
| Step | Asks | Saves to |
|---|---|---|
| 1 | Project name | ProjectName setting (used on reports, leaderboard cards, admin DMs) |
| 2 | What to track on X β accounts, cashtags, or keywords | The default filter's from, cashtags, or keywords array |
| 3 | When to post the daily report β 4 preset times or custom HH:MM | A scheduled job keyed to your chat |
| 4 | Done β summary screen with /recreate hint to preview now | (none) |
The full menu β
Each top-level button opens a focused screen. Drill down freely β every screen has β Back to the previous level and β Close to dismiss.
π― Filters β
What X posts the bot fetches on every scheduled run.

Tap any category to drill down. Excludes is checkbox-style β one tap toggles "exclude retweets / replies / quote tweets".
Named filters (advanced) lets you keep multiple filters running on the same chat β useful when you manage several clients in one group. Each named filter has its own per-row delete button with a confirmation tap. Tap β Add named filter to send a single-line definition through the menu (name from:@x keywords:y cashtags:$Z mention:@m exclude:retweet ignore:@spam). Need at least one of from / keywords / cashtags / mention.
A category screen looks like this β short description of what the category does, the current value, and Add / Remove / Clear all actions:

When you tap β Add, the menu transitions into input mode β type your reply as a normal message, and the screen redraws automatically with a confirmation banner ("β Added 2 cashtags: $BTC, $ETH").
β Add cashtags
Send the cashtags to track, space-separated.
The $ is optional.
Example: $BTC $ETH SOL
Type your reply as a normal message,
or tap Cancel to go back.
[β Cancel]β° Schedule β
When the bot runs and posts the daily report.

Four daily presets cover most communities. The currently-active preset gets a β prefix in its label. Custom time asks for HH:MM. Specific days accepts 14:30 Mon Wed Fri. Cron accepts standard cron expressions (e.g. cron(0 12 ? * MON-FRI *)). The bot enforces a 12-hour minimum frequency to keep costs predictable.
If you tap a schedule preset on a chat with no filters, the menu refuses with a friendly error pointing back at π― Filters β the bot won't schedule a chat that has nothing to fetch.
π Reports & Period β
π Reports & Period
Period: 01/05/2026 7days
Start: 2026-05-01
End: 2026-05-07
The bot fetches X posts inside this window on
every scheduled run. Without a period
configured, the bot uses a rolling 24-hour
window.
[π Set period] [π Clear period]
[β‘ Generate report now]
[π° Show last report]Set period scopes reports to a specific window (e.g. a competition lasting one week). Format DD/MM/YYYY Ndays or Nweeks. Clear period reverts to the default rolling 24h. Generate report now triggers the same Step Function the cron uses β useful for instant previews. Show last report points at /report (which re-posts the most recent cached image at zero credit cost).
π¨ Customization β
Project metadata that appears on reports and the public leaderboard.
π¨ Customization
π· Name: MyToken
βοΈ Description: A community-driven DeFi project
π Long desc.: (multi-paragraph project pitchβ¦)
πΌ Logo: β uploaded
π URLs: 2 URLs
π¬ Topic: Forum topic "Reports"
[π· Name] [βοΈ Description]
[π Long desc.][πΌ Logo]
[π URLs] [π¬ Topic]
[π Leaderboard customization]The Leaderboard sub-tree exposes:
| Setting | Format |
|---|---|
| π Points | Five numbers, space-separated: likes retweets replies quotes views (e.g. 5 1 20 10 0.01) |
| π¨ Colors | Five hex colors, same order |
| π’ Top count | Whole number 1..10 β how many users on the leaderboard |
| π Top title | Free text. Optional |#hex suffix sets a custom color (e.g. Top contributors|#FF8800) |
| π₯ Best-tweet title | Same |
| π Engagement title | Same |
Logo uploads use the bot's existing photo handler β tap πΌ Logo, then send the image as a Telegram photo (not a file). The bot resizes and uploads to the website CDN.
Topic instructs you to send /set_topic from inside the desired forum topic. The menu can't capture message_thread_id from a callback button, so this remains a slash-command surface.
π₯ Admins & Notifications β
Lists chats users designated to receive private DMs about credit exhaustion, fetch errors, and chat-not-found warnings. Adding admins still requires /add_admin @user1 @user2 from the chat β Telegram's @-mention parser only fires on real messages, not callbacks.
π₯ Admins & Notifications
Currently:
β’ Alice (@alice_admin)
β’ Bob (@bob_dev)
To add admins, send /add_admin @user1 @user2
in this chat.
[π Clear notification list]π³ Buy Credits & Plan β
Plan + balance display, plus the buttons that drive the buy and manage flows. The screen renders differently depending on the chat's current plan:
FREE chat:
π³ Buy Credits & Plan
Plan: FREE
Used this month: 47 / 100
Remaining: 53
Resets: 2026-06-01
[π° Buy credits / upgrade] [π Manage subscription]
[π Usage this month]PRO subscription chat:
π³ Buy Credits & Plan
Plan: PRO (subscription) β
Unlimited fetching with Stripe metering above 1 000 / month free.
[π° Buy credits / upgrade] [π Manage subscription]
[π Usage this month]PRO credits chat (ETH-purchased):
π³ Buy Credits & Plan
Plan: PRO (credits)
Credits remaining: 4 152
Total purchased: 5 000
[π° Buy credits / upgrade] [π Manage subscription]
[π Usage this month]The π° Buy credits / upgrade button posts a payment-options card below the menu. The options the bot offers depend on the current plan:
- FREE β both π³ Pay with Credit Card (Stripe subscription) and πͺ Pay with ETH (credit pack).
- PRO credits β both options shown. ETH tops up the existing balance; Stripe layers a subscription on top (existing ETH credits stay and are spent first per fetch).
- PRO subscription β no buy options. The bot replies with a "subscription exists" message and points at π Manage to go to the Stripe portal.
The π Manage subscription button opens the Stripe Customer Portal in your browser β that's where you update your card, cancel, or download invoices. Only meaningful when you have an active Stripe subscription.
The π Usage this month sub-screen breaks out fetched_posts and fetch_attempts for the current month and today β useful for spotting silent failures (high attempts, zero posts β likely 402s or empty queries) and for previewing your next Stripe invoice when you're approaching the 1 000-post threshold.
Buy + manage are also reachable as the legacy slash commands
/buyand/subscription. Behaviour is identical; the menu buttons just save you typing.
π‘ X Posts Auto-relay β
Forwards posts from selected X accounts to the chat as soon as they're published β separate from the scheduled report. Useful when a project wants community admins to see official-account tweets in real time without checking X.
π‘ X Posts Auto-relay
Forward posts from X accounts to this chat as soon
as they're published. Posts can take up to 5
minutes to appear here after the original was
posted on X.
3 active relays:
βΆοΈ @MyTokenOfficial (4/10 today)
βΆοΈ @MyTokenCEO (1/10 today)
βΈ @MyTokenSupport (0/10 today)
[ βΆοΈ @MyTokenOfficial ]
[ βΆοΈ @MyTokenCEO ]
[ βΈ @MyTokenSupport ]
[ β Add Account ]Each relay polls every 5 minutes via the X API. New posts (since the last successful forward) are pushed into the chat as plain URLs β Telegram auto-renders the X preview card so the post body is visible.
Per-relay manage screen lets the operator tune behaviour:
π‘ X Posts Auto-relay βΊ @MyTokenOfficial
State: βΆοΈ Active
Today: 4/10 forwarded
Polls every: 5 min
Post types to forward
β Retweets
β Replies (to other users)
β
Quote tweets
β
Thread continuations (self-replies)
Topic: (default β top of chat)
[ βΈ Pause ] [ βοΈ Cap: 10/day ]
[ β Retweets ] [ β Replies ]
[ β
Quote tweets ] [ β
Thread ]
[ π¬ Set topic ] [ π§Ή Clear topic ]
[ π Delete relay ]| Setting | What it does |
|---|---|
| Cap (1β100/day) | Maximum forwards per chat per UTC day β when reached, the relay stops forwarding silently until midnight UTC. Default 10. |
| Pause / Resume | Disables the polling schedule for this relay; restoring re-creates it instantly. |
| Retweets | When β , retweets by the relayed account are forwarded. Default off. |
| Replies | When β , replies to other users are forwarded. Default off. |
| Quote tweets | When β , quote tweets are forwarded. Default on. |
| Thread continuations | When β , self-replies (a user replying to their own tweets) are forwarded β covers Twitter threads. Default on. Set this off if you only want the head of each thread. |
| Topic | Optional Telegram forum-topic id. When set, relay posts only to that topic instead of the main thread. |
Auto-cleanup: if Telegram returns a "chat-gone" error (bot was kicked / blocked), the relay automatically removes its polling schedule and stored configuration. No leak.
Hard limit: 10 relays per chat. Adjust the underlying constant if you need more.
βΉοΈ About β
βΉοΈ About this chat
Chat ID: -1002593612414
Plan: PRO β
Schedule: daily 18:00 UTC
Project: MyTokenA diagnostics panel for support requests.
How /setup relates to slash commands β
/setup is additive β every existing slash command keeps working exactly as before. The menu wraps the same primitives (buildQueryFromComponents, saveXBotSetting, createScheduleRule, etc.), so behaviour is identical between the two surfaces. Power users can keep typing /add_keywords DeFi airdrop for muscle-memory speed; newcomers get a friendly clickable surface.
Three commands fundamentally cannot be moved into menu buttons because they need plain-text + Telegram message-entity context that callbacks don't carry:
| Command | Why it stays |
|---|---|
/set_topic [name] | Captures the message_thread_id of the topic the message was sent in β a button has no thread context |
/add_admin @user | Relies on Telegram's verified mention entities for chat-admin verification |
/set_x_filtering | Legacy slash command for adding a named filter; the menu's ‴ Named filters β β Add named filter does the same |
Configuration recipes β
Common goals β exact menu paths. Each recipe is one or two minutes of clicking.
"Track only original posts (no retweets, no replies)" β
Most communities want the leaderboard to reward original content, not re-shares.
/setup β π― Filters β π« Excludes β tap Retweets and Replies so both show β
. Done. Future fetches send -is:retweet -is:reply to the X API and quote tweets stay in.
"Reward replies more than likes (community building)" β
Default points: likes 1Γ, retweets 2Γ, replies 1.5Γ, quotes 3Γ, views 0.001. To favour conversation:
/setup β π¨ Customization β π Leaderboard customization β π Points β send:
1 1 5 3 0.001Replies now weigh 5Γ β substantive discussion outpaces drive-by likes.
"Run reports twice a day" β
Schedule fires at most once per day by default. To get an end-of-EU and end-of-US report:
/setup β β° Schedule β π§ Cron expression β send:
cron(0 14,22 ? * * *)Two fires/day at 14:00 + 22:00 UTC. The 12-hour minimum frequency check enforces β₯ 12h spacing automatically β narrower windows are rejected with a clear error.
"Track multiple campaigns simultaneously in one group" β
Three concurrent client campaigns, one Telegram group, one report per campaign per fire.
/setup β π― Filters β ‴ Named filters β β Add named filter, then send one of these on each pass:
campaign_a from:@kol1,@kol2 keywords:"#CampaignALaunch"
campaign_b from:@kol3,@kol4,@kol5 cashtags:$CBT
campaign_c from:@kol6 mention:@CampaignC_OfficialEach fires on the same schedule and posts a separate report tagged with the filter name.
"Forward an account's tweets in real time, between reports" β
Big news from
@MyTokenOfficialshouldn't wait for the 22:00 UTC report.
/setup β π‘ X Posts Auto-relay β β Add Account β send:
@MyTokenOfficial 5(Optional 5 is the daily cap; default 10.) The bot polls every 5 minutes, forwards the URL on a fresh post, Telegram renders the preview card.
"Constrain reports to a campaign window (e.g. 7-day push)" β
Don't want pre-campaign noise contaminating the leaderboard.
/setup β π Reports β π Set period β send:
01/05/2026 7daysReports now fetch posts strictly inside that window. π Clear period reverts to rolling 24 h.
"Make reports post to a forum topic, not the main thread" β
Group uses topics; reports should land in a dedicated Reports topic.
Open the Reports topic, then from inside it send:
/set_topic ReportsFuture reports route to that topic. To revert: /set_topic clear from anywhere in the group.
"Notify two specific admins when credits run out" β
Bot DMs designated admins on credit / fetch / chat-gone errors. By default, it falls back to all chat admins β narrow to a curated list.
/add_admin @alice @bobDMs now go only to @alice and @bob. To clear: /setup β π₯ Admins β π Clear notification list.
"Hide the chat from the public xbot.ninja showcase" β
Solo-KOL portfolios are auto-hidden (single user fails the β₯ 2 active users threshold). For community projects that should stay private:
There's no explicit hide toggle β public listing is gated by metric thresholds. Two ways to stay private:
- Run a small / quiet chat that doesn't meet the thresholds (top user score < 300, posts < 5/month, or active users < 2).
- Contact support to set the chat as exempt β the public dashboard skips it regardless of metrics.
The chat's direct URL (https://xbot.ninja/?chatId=β¦) remains accessible regardless. Share it only with people who should see the data.
Common gotchas β
| Symptom | Reason | Fix |
|---|---|---|
Schedule "rejected" with FREQUENCY_ERROR | Cron tries to fire more often than every 12 h | Spacing check β pick at least 12-hour gaps. The error message names the offending hour pair. |
/setup doesn't appear in autocomplete | BotFather command list out of date | The bot accepts /setup regardless of autocomplete. Update BotFather β /setcommands if discoverability matters. |
| Filter preview shows empty parens / weird query | Some component is empty | /setup β π― Filters shows the literal query. Add at least one of accounts / cashtags / keywords / mentions. |
| X Posts Auto-relay forwards a thread's worth of posts at once | Self-replies bypass X API's exclude=replies | /setup β π‘ X Posts Auto-relay β @account β toggle β Thread continuations off. The bot then keeps only the thread head. |
| Daily cap reached but I want more | Hit MAX_POSTS_PER_DAY for relay | Tap βοΈ Cap and raise. Each post forwarded counts as one credit. |
| Custom title / color reverted overnight | Settings update worked but UPDATED_AT bump invalidated render cache; next fetch shows the new value | Wait one report cycle. The render cache rebuilds on the next fetch. |
| Report has "0 posts" everywhere | No posts matched the filter in the configured period | Drop the period (rolling 24 h is more forgiving), or widen filters. Often it's a typo in a cashtag. |
| Bot "online" but reports stop arriving | Bot was demoted from admin / kicked silently | Check Telegram β group admins. Re-promote if missing. The bot self-disables on chat-gone errors. |
Done β
The wizard's final screen recaps everything that was saved and points at /setup β π Reports β β‘ Generate report now for an immediate preview:

That's the whole tour. Type /setup in your group to start.