| freeqsay: Nim port of the Clojure implementation fa53aa2 nandi 6h ago | 1 | ## freeqsay: handle + message → cowsay balloon over a FreeqWorld ANSI avatar. |
| 2 | |
| 3 | import std/strutils |
| 4 | import ./ansi, ./avatar, ./balloon, ./resolve |
| 5 | |
| 6 | type Said* = object |
| 7 | did*, handle*, text*, output*: string |
| 8 | |
| 9 | proc freeqsay*(handleOrDid, message: string, width = 40, think = false, |
| 10 | tailIndent = 8, scale = 2, facing = fSouth, frame = 0, |
| 11 | resolveOpts = ResolveOpts()): Said = |
| 12 | ## Compose a cowsay balloon + FreeqWorld character for a handle and message. |
| 13 | let |
| 14 | id = resolveIdentity(handleOrDid, resolveOpts) |
| 15 | av = deriveAvatar(id.did) |
| 16 | balloon = makeBalloon(message, width, think) |
| 17 | tail = makeTail(think, tailIndent) |
| 18 | face = avatarToAnsi(av, scale, facing, frame) |
| 19 | Said(did: id.did, handle: id.handle, text: message, |
| 20 | output: [balloon, tail, face].join("\n")) |