@@ -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