Calls
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.
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.
An address or link that resolves to no price and no symbol produces neither a card nor a call.
Stored per call event
| Setting | Value |
|---|---|
| Caller | user 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. |
| Location | chat id, message id, and the forum topic id, when the message was sent inside one. |
| Time | the Unix timestamp of the call, plus a bot-wide sequence number. |
| Market data | that 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
| Input | Output |
|---|---|
| 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 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.
Text lines sent for the graphic
| Event | Line 1 | Line 2 |
|---|---|---|
| A call | at $MC market cap — or "no market cap yet" with no price | |
| A milestone alert | $SYM just hit Nx | called by |
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.