Plugin demo · not a character

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.

Ask in the room
Maxmember

Cinderella, what is bitcoin at?

Cinderellareply

🕯️ 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.

Configured pairs
BTCBitcoin61,240 €+2.1%
ETHEthereum3,180 €−0.4%
XMRMonero212 €+5.8%

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
The providers

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
What is sent

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.

Why a key rides in a header 1 lines · 53 characters
the querystring alternative would put the key in logs
Source site material Block 4 section 7 · the Crypto Prices plugin
QuestionAnswer
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
Pinning

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.

What she says about a ticker she has no pin for 1 lines · 82 characters
🕯️ I do not know *{symbol}*. Ask the keeper of this house to add it to my ledger.
Source site material Block 4 section 7 · the Crypto Prices plugin
The answer, and the failures

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.

The shape of an answer 1 lines · 47 characters
💰 *{amount} {base}* is about *{value} {quote}*
Source site material Block 4 section 7 · the Crypto Prices plugin
Why the disclaimer ships empty 1 lines · 48 characters
what a price message must say differs by country
Source site material Block 4 section 7 · the Crypto Prices plugin

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.
What a member typed 1 lines · 13 characters
nice :)))))))
Source site material Block 4 section 7 · the Crypto Prices plugin
What she made of it 1 lines · 55 characters
More than one *NICE* is known to me. Which do you mean?
Source site material Block 4 section 7 · the Crypto Prices plugin

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.