## freeqsay: handle + message → cowsay balloon over a FreeqWorld ANSI avatar. import std/strutils import ./ansi, ./avatar, ./balloon, ./resolve type Said* = object did*, handle*, text*, output*: string proc freeqsay*(handleOrDid, message: string, width = 40, think = false, tailIndent = 8, scale = 2, facing = fSouth, frame = 0, resolveOpts = ResolveOpts()): Said = ## Compose a cowsay balloon + FreeqWorld character for a handle and message. let id = resolveIdentity(handleOrDid, resolveOpts) av = deriveAvatar(id.did) balloon = makeBalloon(message, width, think) tail = makeTail(think, tailIndent) face = avatarToAnsi(av, scale, facing, frame) Said(did: id.did, handle: id.handle, text: message, output: [balloon, tail, face].join("\n"))