Skip to content

Commit 5d114b3

Browse files
committed
fix: optimize message deletion logic in repel command to use Map for target messages and improve timestamp handling
1 parent f52c058 commit 5d114b3

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

src/commands/moderation/repel.ts

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -150,22 +150,26 @@ const handleDeleteMessages = async ({
150150
const failedChannels: string[] = [];
151151

152152
// Collect all target messages from all channels and find the latest timestamp
153-
const channelMessages = channels.map((channel) => {
154-
const messages = channel.messages.cache;
155-
const targetMessages = messages.filter(
156-
(message) => message.author && message.author.id === target.id && message.deletable
157-
);
158-
return { channel, targetMessages };
159-
});
153+
const channelMessages: Array<{
154+
channel: TextChannel;
155+
targetMessages: Map<string, import('discord.js').Message>;
156+
}> = [];
157+
let latestMessageTimestamp = 0;
158+
159+
for (const channel of channels) {
160+
const targetMessages = new Map<string, import('discord.js').Message>();
161+
162+
for (const [id, message] of channel.messages.cache) {
163+
if (message.author && message.author.id === target.id && message.deletable) {
164+
targetMessages.set(id, message);
165+
latestMessageTimestamp = Math.max(latestMessageTimestamp, message.createdTimestamp);
166+
}
167+
}
160168

161-
// Find the latest message timestamp across all channels
162-
const latestMessageTimestamp = channelMessages.reduce((latest, { targetMessages }) => {
163-
const channelLatest = targetMessages.reduce(
164-
(max, msg) => Math.max(max, msg.createdTimestamp),
165-
0
166-
);
167-
return Math.max(latest, channelLatest);
168-
}, 0);
169+
if (targetMessages.size > 0) {
170+
channelMessages.push({ channel, targetMessages });
171+
}
172+
}
169173

170174
// If no messages found from the target user, return early
171175
if (latestMessageTimestamp === 0) {
@@ -176,9 +180,13 @@ const handleDeleteMessages = async ({
176180
await Promise.allSettled(
177181
channelMessages.map(async ({ channel, targetMessages }) => {
178182
try {
179-
const messagesToDelete = targetMessages
180-
.filter((message) => latestMessageTimestamp - message.createdTimestamp < lookBack)
181-
.map((msg) => msg.id);
183+
const messagesToDelete: string[] = [];
184+
185+
for (const [id, message] of targetMessages) {
186+
if (latestMessageTimestamp - message.createdTimestamp < lookBack) {
187+
messagesToDelete.push(id);
188+
}
189+
}
182190

183191
if (messagesToDelete.length === 0) {
184192
return;

0 commit comments

Comments
 (0)