Skip to content

Commit 9c416c1

Browse files
authored
Merge branch 'master' into feat/extended-image-download-opts
2 parents cc95e47 + aa5ca76 commit 9c416c1

File tree

5 files changed

+26
-12
lines changed

5 files changed

+26
-12
lines changed

docs/api-reference/createtranscript.md

+8
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,11 @@ Defined in [discord.js](https://discord.js.org/#/docs/discord.js/main/typedef/Gu
9090
### `options: CreateTranscriptOptions`
9191

9292
The same options as [generatefrommessages.md](generatefrommessages.md 'mention') but adds the `limit` option which lets you limit set the number of messages to fetch.
93+
94+
### `options.limit: number`
95+
96+
The number of messages to fetch.
97+
98+
### `options.filter: (message: Message<boolean>) => boolean`
99+
100+
A function that will be called for each message to determine if it should be included in the transcript. If false, the message will not be included.

src/generator/renderers/reply.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default async function MessageReply({ message, context }: { message: Mess
2727
roleColor={referencedMessage.member?.displayHexColor ?? undefined}
2828
bot={!isCrosspost && referencedMessage.author.bot}
2929
verified={referencedMessage.author.flags?.has(UserFlags.VerifiedBot)}
30-
op={message.channel.isThread() && referencedMessage.author.id === message.channel.ownerId}
30+
op={message?.channel?.isThread?.() && referencedMessage.author.id === message?.channel?.ownerId}
3131
server={isCrosspost ?? undefined}
3232
command={isCommand}
3333
>

src/index.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export async function createTranscript<T extends ExportReturnType = ExportReturn
111111
// fetch messages
112112
let allMessages: Message[] = [];
113113
let lastMessageId: string | undefined;
114-
const { limit } = options;
114+
const { limit, filter } = options;
115115
const resolvedLimit = typeof limit === 'undefined' || limit === -1 ? Infinity : limit;
116116

117117
// until there are no more messages, keep fetching
@@ -123,9 +123,11 @@ export async function createTranscript<T extends ExportReturnType = ExportReturn
123123

124124
// fetch messages
125125
const messages = await channel.messages.fetch(fetchLimitOptions);
126+
const filteredMessages = typeof filter === 'function' ? messages.filter(filter) : messages;
126127

127128
// add the messages to the array
128-
allMessages.push(...messages.values());
129+
allMessages.push(...filteredMessages.values());
130+
// Get the last key of 'messages', not 'filteredMessages' because you will be refetching the same messages
129131
lastMessageId = messages.lastKey();
130132

131133
// if there are no more messages, break

src/types.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AttachmentBuilder } from 'discord.js';
1+
import type { AttachmentBuilder, Message } from 'discord.js';
22
import type { RenderMessageContext } from './generator';
33

44
export type AttachmentTypes = 'audio' | 'video' | 'image' | 'file';
@@ -72,5 +72,11 @@ export type CreateTranscriptOptions<T extends ExportReturnType> = Partial<
7272
* The max amount of messages to fetch. Use `-1` to recursively fetch.
7373
*/
7474
limit: number;
75+
76+
/**
77+
* Filter messages of the channel
78+
* @default (() => true)
79+
*/
80+
filter: (message: Message<boolean>) => boolean;
7581
}
7682
>;

tests/generate.ts

+6-8
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import { TranscriptImageDownloader, createTranscript } from '../src';
44
import { config } from 'dotenv';
55
config();
66

7+
const { GuildMessages, Guilds, MessageContent } = discord.GatewayIntentBits;
8+
79
const client = new discord.Client({
8-
intents: [discord.IntentsBitField.Flags.GuildMessages, discord.IntentsBitField.Flags.Guilds],
10+
intents: [GuildMessages, Guilds, MessageContent],
911
});
1012

1113
client.on('ready', async () => {
@@ -18,15 +20,11 @@ client.on('ready', async () => {
1820
}
1921

2022
console.time('transcript');
23+
2124
const attachment = await createTranscript(channel, {
22-
// saveImages: true,
23-
callbacks: {
24-
resolveImageSrc: new TranscriptImageDownloader()
25-
.withMaxSize(5120) // 5MB in KB
26-
.withCompression(40, true) // 40% quality, convert to webp
27-
.build(),
28-
},
25+
// options go here
2926
});
27+
3028
console.timeEnd('transcript');
3129

3230
await channel.send({

0 commit comments

Comments
 (0)