Community bots

Slack and Discord bots that bring Drazill odds into the channels where communities already talk — built on nothing but this public API.

/drazill will-the-boc-cut-in-september in a channel, and the current odds come back as a card. Watch a market, and the channel hears about the resolution without anyone refreshing a page.

One process serves both platforms. It is an ordinary consumer of the API documented on this site — the same endpoints, the same keys, the same rate limits you get.

What it does

CommandWhat happens
/drazill <query>Looks up a market by name, slug, or a pasted market URL and posts its card. An ambiguous query answers with the top 3 matches.
/drazill watch <market>Alerts this channel when the market resolves.
/drazill watch <market> moves >5%Also alerts when the price moves that far, at most once per market per cooldown.
/drazill unwatch <market>Stops alerting this channel.
/drazill watchingLists what this channel watches.
/drazill helpUsage.

Changing what a channel watches is a channel-management action, so it is permission-checked per platform: Manage Channels or Administrator on Discord, workspace admin or owner on Slack.

What it will not do

  • It never places an order and never moves money. Its API key carries read and websocket scopes only. There is no code path in it that could trade.
  • It never states more than the payload did. A field the API did not send is left off the card rather than inferred. Probabilities in the tails render as <1% / >99% instead of rounding to a certainty nobody claimed.
  • It never fills silence with stale odds. If the API is unavailable, the bot says the API is unavailable.

How it is built — the short version

It is the reference answer to “is the public API enough to build something real on?”

  • Market lookup is GET /api/v1/search and GET /api/v1/markets/slug/{slug}, through the published Python SDK with its own X-API-Key.
  • Alerts ride the public WebSocket: market:{market_id} for resolutions and prices:{outcome_id} for moves. Both are public channels — see Realtime overview.
  • It implements the sequencing and replay contract literally: it tracks each channel’s sequence, and on a gap it holds the frame, sends a resync, drains the paginated replay, and only then applies what it held.
  • It honours the published rate limits — it reads X-RateLimit-Remaining to stay inside the window, and backs off with jitter on Retry-After.
  • Subscriptions live in the bot’s own local store. It holds no Drazill database credential and imports nothing from the Drazill backend, and a test in its CI lane fails the build if that ever stops being true.

If you are building your own integration, that list is the whole recipe — every piece of it is documented on this site.

Availability

The bot is not yet installable from the Slack or Discord app directories. Publishing a Slack or Discord application is a public submission, and that step has not been taken. There is no waitlist and no signup form here; when the applications are published, this page will carry the install links.

What exists today is the source, in integrations/bots/ — runnable now if you want to host it yourself for your own workspace, with a Dockerfile, a compose service, and a runbook covering the environment matrix and key provisioning. You will need to create your own Slack app or Discord application for your own workspace, which is the same path any self-hoster takes.

Whether you run this bot or write your own, mint a dedicated key for it with read and websocket scopes only — never a write scope, and never a drzl_live_ key in a place other people can reach. See Get an API key.