Market rates, and nothing else
A worked example of the plugin boundary. A member asks, the plugin reads prices from the source the operator configured, a character phrases the answer, and the exchange lands in the archive under the same consent gates as everything else. Every number on this page is sample data.
Cinderella, what is bitcoin at?
🕯️ Bitcoin stands at 61,240 € this minute, Monero at 212 €. Kraken spot, 12:04 UTC.
The plugin is a capability. The voice belongs to whichever character carries it: the Magician would answer the same question with the same numbers and less ceremony.
Sample data. Live rates come from the endpoint the operator configures.
Permitted
- Read rates from the configured public endpoint
- Phrase one reply when asked, in the carrying character's voice
- Land in the archive under the same consent gates
Not permitted
- Hold keys or touch a wallet
- Execute or recommend trades
- Send anything unprompted
- Change consent or permissions
Three, in an order you set
Two need no key at all. The credits ship with the answers.
First to answer wins
Three providers in an order the operator sets, and the first that answers is the one that does. Two of them need no key at all, so the plugin works out of the box; the third does, and a rejected key is shown to the operator rather than dressed up as a quiet market.
The licence credit lines ship with the answers, because using somebody's free data feed and hiding where it came from is not a saving worth making.
The credit lines that ship
- 🔗 Powered by CoinGecko
- 🔗 Data provided by CoinMarketCap.com
A ticker, and never a member
The provider learns which coin was asked about and nothing whatsoever about who asked.
Out, and not out
What leaves the machine is a ticker, or the identifier it is pinned to. Never the member's message, never who they are, never which group they are in. A quote is requested by pinned identifier rather than by symbol, so the provider is never asked an ambiguous question on a member's behalf.
the querystring alternative would put the key in logs
| Question | Answer |
|---|---|
| The providers | A failover chain, operator-ordered: CoinGecko keyless, Dexscreener keyless with a liquidity floor, and CoinMarketCap where a key is required. Licence credit lines ship with the answers |
| What is sent, and what is not | The extracted ticker or the pinned asset id only. Never the member message text, never member or group identity; quotes go by pinned id and never by symbol, and keys ride in headers |
| Pinning | The first resolution of a ticker writes a permanent pin from symbol to asset, with majors seeded and locked in the migrations, so a ticker cannot quietly become a different token later. The operator can add, override, lock, and check every pinned asset against the live providers |
| Cache and limits | A price cache lifetime in seconds, in memory; 5 questions per member and 20 per chat per minute, with the numbers shared and the spend per bot; and provider budgets per minute for each |
| Failure | The chain fails over, and when nothing answers she says so. A rejected key is shown only to the operator, never dressed up as a quiet market |
A symbol cannot change its mind
The first resolution is written down permanently, so the same question keeps meaning the same coin.
Why this is the failure that matters
The first time a ticker is resolved, the answer is written down permanently. The majors are seeded and locked in the migrations. So a symbol cannot quietly start meaning a different token later, which is the failure mode that matters here: not a wrong price, but a right price for the wrong thing.
When a ticker is genuinely ambiguous she asks, and the member's answer is pinned for everybody, so nobody is asked the same question twice.
🕯️ I do not know *{symbol}*. Ask the keeper of this house to add it to my ledger.
Out of earshot, rather than a stale number
What a price answer looks like, what ships empty on purpose, and what happens when no provider answers.
💰 *{amount} {base}* is about *{value} {quote}*
what a price message must say differs by country
When the chain runs out
- 🌙 The markets are out of earshot just now. Try again in a moment.
- 🌙 I have been asking the markets too often. Give me a minute and ask again.
nice :)))))))
More than one *NICE* is known to me. Which do you mean?
What was one keystroke away
A member wrote applause after two price answers, and it was read as a ticker, sent to a provider, and turned into a question. One keystroke from a permanent pin on a word that was never a coin. A carried-over intent may now reuse what is already pinned and can never trigger a fresh resolution, and an interjection produces no reply and reaches no provider at all.