API Reference
createTranscript(channel, options?)
Grabs messages from a discord.js TextChannel and turns them into an HTML transcript.
Parameters:
channel- A discord.jsTextChannelinstanceoptions-CreateTranscriptOptions(optional, see Options)
Returns: Promise<TranscriptResult>
interface TranscriptResult {
html: string; // Full HTML document
buffer: Buffer; // Ready for discord.js file uploads
filename: string; // e.g. "transcript-general-2026-03-15.html"
messageCount: number;
}
Usage
import { createTranscript } from "@getoeteter/discord-transcripts";
// Basic
const result = await createTranscript(channel);
// With options
const result = await createTranscript(channel, {
limit: 1000,
theme: "dark",
enableSearch: true,
showUserStats: true,
});
// Send as file
await interaction.editReply({
files: [{ attachment: result.buffer, name: result.filename }],
});
generateTranscriptHtml(data, options?)
Takes raw transcript data and gives you back a complete HTML document. Doesn't need discord.js.
Parameters:
data-TranscriptDataobjectoptions-TranscriptOptions(optional, see Options)
Returns: string (complete HTML document)
Usage
import {
generateTranscriptHtml,
type TranscriptData,
} from "@getoeteter/discord-transcripts";
const data: TranscriptData = {
channel: { id: "123", name: "general", type: 0 },
messages: [/* ... */],
roles: {},
channels: {},
memberRoles: {},
};
const html = generateTranscriptHtml(data, { theme: "dark" });
// Write to file
import { writeFileSync } from "fs";
writeFileSync("transcript.html", html);
Exports
Here's everything you can import:
// Functions
export { createTranscript } from "./lib/discord-adapter";
export { generateTranscriptHtml } from "./lib/generator";
// Types
export type {
TranscriptData,
TranscriptOptions,
CreateTranscriptOptions,
DiscordMessage,
DiscordUser,
DiscordEmbed,
DiscordAttachment,
DiscordComponent,
DiscordReaction,
DiscordThread,
DiscordSticker,
DiscordPoll,
DiscordPollAnswer,
DiscordPollMedia,
DiscordInteraction,
DiscordVoiceMessage,
// ...and more
};