Skip to Content
Nextra 2 Alpha

Calls

A call is the record created every time the bot answers a pasted address or link with a token card. Recording one is a side effect of that card, not a separate action.

Recording a call

There is no /call command and no button that creates a call. The scanner and the calls layer are one pipeline: when a pasted contract address or link resolves to a token, the scanner hands that token straight to the calls layer’s send_card, and send_card registers the call before it renders or sends anything.

If every delivery attempt inside send_card fails — the rich message, the photo, and the plain-text send all reject — the scanner falls back to sending its own plain-text card. That fallback also registers the call, through the same registration function, so a total delivery failure never loses the call.

An address or link that resolves to no price and no symbol produces neither a card nor a call.

Stored per call event

SettingValue
Calleruser id, display name, and @username from the message’s sender. An anonymous admin post (posted as the chat) stores user id 0 and the chat’s title as the name.
Locationchat id, message id, and the forum topic id, when the message was sent inside one.
Timethe Unix timestamp of the call, plus a bot-wide sequence number.
Market datathat moment’s market cap and price.

The first call is the reference forever

The first call recorded for a coin on a bot is fixed as that coin’s reference. Every multiple, every percentage gain, and every Called by market-cap figure shown afterward is measured against the first call’s market cap and price — never against a later or a live figure.

Exception: if the first call happened before the token had a trading pool, it has no market cap or price to reference at the time. The first later sighting that does carry a price becomes the reference instead, and the coin’s stored first-call record is rewritten with that price and market cap.

An unpriced first call gets its reference later

InputOutput
Call line before a price exists🎯 Called by <a href="tg://user?id=777">@chris</a> (no market cap at the time)
Call line once a price is found🎯 Called by <a href="tg://user?id=777">@chris</a> at <b>$900M</b>

Both are calls.call_lines’s first line for the same coin — before and after calls.apply_price finds its first price for it.

Every call after the first is stored as its own event, with its own caller, its own market cap, and its own timestamp. Only the first call’s record decides the coin’s reference — a repeat call, including one by the original caller, never replaces it.

Same-message dedupe

Every registration checks the incoming message’s chat id and message id against the coin’s most recently stored event. If they match, nothing new is recorded.

This exists for the delivery-failure fallback described above: when the rich card path fails completely and the scanner resends the paste as a plain-text card, that second attempt carries the same chat id and message id as the first, so it does not add a second event for the same paste.

This is separate from candidate recognition: if the same address appears twice in one message, the scanner folds it into a single candidate before either copy reaches the calls layer, so that message never produces two cards — and never two calls — for the same address.

The call graphic

Every call, and every milestone alert (chapter 3.6), is sent with a generated image. The bot requests it from its tweetshot service (POST /call), with a 25-second timeout.

The request carries the caller’s display name and Telegram profile picture, the coin’s symbol, its image, and its banner, plus two lines of text.

Text lines sent for the graphic

EventLine 1Line 2
A call<caller> called $SYMat $MC market cap — or “no market cap yet” with no price
A milestone alert$SYM just hit Nxcalled by <caller> at MCnowMC · now MC

The graphic is generated fresh for every call and every milestone alert. It is not cached or reused between events.

When the request fails or times out, the card is sent without an image. Nothing else about the call — the text, the buttons, the registration — is affected.