@@ -84,13 +84,15 @@ async function fetchFromDiscord(
8484 throw new Error ( `Failed to fetch ${ endpoint } : ${ response . statusText } ` )
8585 }
8686
87- const data = await response . json ( )
87+ const rawData = await response . json ( )
88+ const data = rawData . filter ( ( item ) => item && item . author && item . content )
89+
8890 if ( fetchType === 'threads' ) {
8991 allResults . push ( ...( data . threads || [ ] ) )
9092 if ( ! data . has_more ) {
9193 break
9294 }
93- params . before = data . threads [ data . threads . length - 1 ] . thread_metadata . archive_timestamp
95+ params . before = data . threads [ data . threads . length - 1 ] ? .thread_metadata ? .archive_timestamp
9496 } else {
9597 allResults . push ( ...data )
9698 if ( data . length < 100 ) {
@@ -104,29 +106,40 @@ async function fetchFromDiscord(
104106}
105107
106108function processMessages ( messages : Message [ ] ) {
107- const mergedMessages = new Map ( )
109+ const mergedMessages : Message [ ] = [ ]
110+
111+ for ( let i = 0 ; i < messages . length ; i ++ ) {
112+ const currentMessage = messages [ i ]
113+
114+ if ( ! currentMessage || ! currentMessage . author || ! currentMessage . content ) {
115+ console . warn ( 'Skipping message due to missing author or content:' , currentMessage )
116+ continue
117+ }
108118
109- messages . reverse ( ) . forEach ( ( message : Message ) => {
110- const key = message . author . id
111119 const isBot =
112- message . author . bot ||
113- message . author . username === 'Payload-Bot' ||
114- message . author . username . includes ( 'Bot' )
120+ currentMessage . author . bot ||
121+ currentMessage . author . username === 'Payload-Bot' ||
122+ currentMessage . author . username . includes ( 'Bot' )
115123
116124 if ( isBot ) {
117- return
125+ continue
118126 }
119- if ( mergedMessages . has ( key ) ) {
120- const prevMessage = mergedMessages . get ( key )
121- prevMessage . content += `\n\n${ message . content } `
122- prevMessage . attachments = prevMessage . attachments . concat ( message . attachments )
127+
128+ if (
129+ mergedMessages . length > 0 &&
130+ mergedMessages [ mergedMessages . length - 1 ] . author . id === currentMessage . author . id
131+ ) {
132+ const prevMessage = mergedMessages [ mergedMessages . length - 1 ]
133+ prevMessage . content += `\n\n${ currentMessage . content } `
134+ prevMessage . attachments = prevMessage . attachments . concat ( currentMessage . attachments )
123135 } else {
124- mergedMessages . set ( key , message )
136+ mergedMessages . push ( { ... currentMessage } )
125137 }
126- } )
138+ }
127139
128- return Array . from ( mergedMessages . values ( ) )
140+ return mergedMessages
129141}
142+
130143function createSanitizedThread ( thread : Thread , messages : Message [ ] ) {
131144 const [ intro , ...combinedResponses ] = processMessages ( messages )
132145
@@ -200,7 +213,7 @@ async function fetchDiscord() {
200213 . then ( ( data ) =>
201214 data . docs . map ( ( thread ) => ( {
202215 id : thread . discordID ,
203- messageCount : 0 ,
216+ messageCount : thread . communityHelpJSON . messageCount || 0 ,
204217 } ) ) ,
205218 )
206219
0 commit comments