Files
tiennm99bot/renderer/docs/miti99bot-integration.md
T
tiennm99 277c913f71 refactor(random)!: configure the renderer by base URL as RENDERER_URL
The bot now takes the renderer's base URL and appends each /api/<name>
route itself, instead of taking the full /api/gif endpoint and swapping
its last path segment for /gacha and /genshin. The client, its files, and
its errors are named after the renderer rather than wheelofnames; the
/wheelofnames command keeps its name.

BREAKING CHANGE: WHEELOFNAMES_API_URL is replaced by RENDERER_URL, which
holds the base URL (e.g. http://renderer:3000) rather than the /api/gif
endpoint. compose.yml sets it, so Coolify needs no value.
2026-10-03 11:52:50 +07:00

1.3 KiB

miti99bot Integration

miti99bot's /wheelofnames renders its wheel with this service, configured by RENDERER_URL, the service's base URL. The service is internal to the compose network, so requests carry no credentials. Winner handling stays explicit:

  1. The bot parses the comma-separated options.
  2. It chooses winnerIndex itself.
  3. It calls POST /api/gif.
  4. It sends the response bytes with Telegram sendAnimation.
  5. Its caption uses its own winner as the source of truth.
  6. If the service is not configured or fails, it replies with the winner as text.

Request

Send the JSON body:

{
  "options": ["alice", "bob", "carol"],
  "winnerIndex": 1,
  "durationMs": 6500,
  "holdMs": 1200,
  "fps": 15,
  "size": 512,
  "theme": "classic"
}

Response

  • Body: image/gif
  • Headers:
    • X-Wheel-Winner-Index
    • X-Wheel-Winner
    • X-Render-Duration-Ms

X-Wheel-Winner is URL-encoded. Decode it before displaying if service-side winner selection is used.

Gacha

/gacha in miti99bot calls POST /api/gacha on the same service. The bot appends the route to RENDERER_URL, picks the result and rarity itself, and sends the MP4 with sendAnimation. On any failure it falls back to a text reply.

The unlisted /genshin command works the same way against POST /api/genshin and sends the 7-second 640x360 meteor wish.