Skip to content

Commit 40f03c2

Browse files
committed
Fix /save command to prevent OOM
1 parent ea8efc1 commit 40f03c2

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

src/commands/admin/save.ts

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ export async function saveMessagesForGuild(
108108
try {
109109
let lastMessageId: string | undefined;
110110
let messagesFound = true;
111-
const channelMessages = [];
112111

113112
if (channel.isThread() && !channel.joined) {
114113
await channel.join();
@@ -155,10 +154,11 @@ export async function saveMessagesForGuild(
155154
}
156155
}
157156

158-
channelMessages.push(...validMessages);
159-
160-
// Update progress
161-
totalSaved += validMessages.length;
157+
// Save messages to the database
158+
if (validMessages.length > 0) {
159+
await saveChannelMessages(guildId, validMessages);
160+
totalSaved += validMessages.length;
161+
}
162162

163163
if (since) {
164164
lastMessageId = messages.first()?.id;
@@ -167,21 +167,20 @@ export async function saveMessagesForGuild(
167167
}
168168
}
169169

170-
if (channelMessages.length > 0) {
171-
if (progressMessage && interaction) {
172-
await progressMessage.edit({
173-
content: (
174-
translations.responses?.progress?.[interaction.locale] ??
175-
"Saved {saved} messages from {channels} channels..."
176-
)
177-
.replace("{saved}", totalSaved.toString())
178-
.replace("{channels}", totalChannels.toString()),
179-
});
180-
}
181-
await saveChannelMessages(guildId, channelMessages);
182-
totalChannels++;
183-
184-
logger.info("Saved %d messages from channel %s", channelMessages.length, channel.name);
170+
totalChannels++;
171+
logger.info("Finished saving messages from channel %s", channel.name);
172+
173+
// Update progress
174+
if (progressMessage && interaction) {
175+
await progressMessage.edit({
176+
content: (
177+
translations.responses?.progress?.[interaction.locale] ??
178+
"Saved {saved} messages from {channels}/{textChannels} channels..."
179+
)
180+
.replace("{saved}", totalSaved.toString())
181+
.replace("{channels}", totalChannels.toString())
182+
.replace("{textChannels}", textChannels.size.toString()),
183+
});
185184
}
186185
} catch (error) {
187186
logger.warn("Error saving channel %s: %o", channel.name, error);

0 commit comments

Comments
 (0)