jipy-html-transcripts
v0.1.0
Published
Generate self-contained HTML transcripts for Discord channels with a modern Discord look (Components V2, nameplates, server tags, badges, forwarded messages, threads, super reactions, spoilers).
Downloads
0
Maintainers
Readme
jipy-html-transcripts
Generate self-contained HTML transcripts for Discord channels with a modern Discord look.
Drop-in API replacement for discord-html-transcripts:
import { generateFromMessages, createTranscript } from 'jipy-html-transcripts';Features
- Modern Discord-style UI — animated nameplates, server tag pill, user badges.
- Components V2 — Container (with accent), TextDisplay, File, Section + Accessory, Action Rows, Buttons.
- Forwarded messages —
messageSnapshots[0]rendered with the grey "Forwarded" header + nested cell. - Threads / forum posts — parent-channel breadcrumb + applied-tag list.
- System messages — phrasing/icon for joins, boosts, pins, calls, channel renames.
- Super reactions — burst-count > 0 triggers a CSS particle burst.
- Spoilers — click-to-reveal for inline
||x||and spoiler attachments. - Code blocks — language pill + copy button + lightweight syntax highlight.
- Modern embeds — author chip with circular avatar, fields grid, image gallery, footer + timestamp.
- Header panel — channel name, topic, breadcrumb, message count, date range, ticket meta chips.
- Image inliner — optional
data:base64 inlining with a configurable byte budget. - Self-contained — single HTML document with inlined CSS/JS so it works behind a
Content-Type: text/htmlroute or as a Discord attachment.
Install
pnpm add jipy-html-transcripts discord.jsIf you're consuming this from a sibling repo (the way Savas-Bot does), use the file: link:
// package.json
"dependencies": {
"jipy-html-transcripts": "file:../Jipy-Html-Transcripts"
}API
import { generateFromMessages, createTranscript } from 'jipy-html-transcripts';
const attachment = await generateFromMessages(messages, channel, {
filename: 'ticket.html',
saveImages: true,
footerText: 'Exported {number} message{s}',
poweredBy: false,
theme: 'auto',
showHeader: true,
headerMeta: {
ticketId: ticket.channelId,
openedBy: ticket.openedBy,
closedBy: closer.id,
type: 'Support',
createdAt: ticket.createdAt,
closedAt: new Date()
},
nameplates: 'auto',
maxBytes: 14_500_000
});generateFromMessages returns a discord.js AttachmentBuilder whose payload is a Buffer<utf8> of the full HTML document.
Options
| option | default | notes |
| --- | --- | --- |
| filename | <channel>-transcript.html | name on the produced AttachmentBuilder |
| saveImages | false | inline external images as data: URIs |
| footerText | Exported {number} message{s} | supports {number} and {s} |
| poweredBy | false | adds a small attribution suffix in the footer |
| theme | auto | dark / light / auto |
| showHeader | true | toggles the channel header panel |
| headerMeta | — | ticketId, openedBy, closedBy, type, createdAt, closedAt |
| nameplates | auto | off, or a Record<sku_id, { className }> override |
| serverTag | — | fallback { label, iconUrl? } when member.clan is absent |
| maxBytes | none | best-effort cap on output size; controls image inlining |
| customCss | — | appended after the bundled stylesheet |
Build
pnpm install
pnpm buildThis emits compiled JS + .d.ts to dist/ and copies the static assets (assets/base.css, nameplates.css, badges.css, script.js).
Versioning
Pre-1.0; minor versions may break shape until the API stabilises.
