@@ -286,13 +286,13 @@ func UpdateInternedMessage(
286286 return err
287287 }
288288 } else {
289- err = SaveMessageContents (ctx , tx , interned , msg , notifyUser )
289+ contentChanged , err : = SaveMessageContents (ctx , tx , interned , msg , notifyUser )
290290 if err != nil {
291291 return err
292292 }
293293
294294 createSnippet := canCreateSnippet && shouldAutomaticallyCreateSnippet (interned )
295- err = UpdateSnippetForInternedMessage (ctx , tx , interned , createSnippet , notifyUser )
295+ err = UpdateSnippetForInternedMessage (ctx , tx , interned , createSnippet , notifyUser && contentChanged )
296296 if err != nil {
297297 return err
298298 }
@@ -357,6 +357,9 @@ Processes a single Discord message, saving as much of the message's content
357357and attachments as allowed by our rules and user settings. Does NOT create
358358snippets.
359359
360+ contentChanged is true if we have no stored content or the new content is different from the stored version.
361+ Only checks content! Not attachments/embeds.
362+
360363Idempotent; can be called any time whether the contents exist or not.
361364
362365NOTE!!: Replaces interned.MessageContent if it was created or updated!!
@@ -367,7 +370,7 @@ func SaveMessageContents(
367370 interned * InternedMessage ,
368371 msg * Message ,
369372 notifyUser bool ,
370- ) error {
373+ ) ( contentChanged bool , err error ) {
371374 if interned .DiscordUser == nil {
372375 // We do not save message contents unless a Discord account is linked.
373376
@@ -383,16 +386,19 @@ func SaveMessageContents(
383386 ),
384387 )
385388 if err != nil {
386- return oops .New (err , "failed to send unlinked account warning message" )
389+ return true , oops .New (err , "failed to send unlinked account warning message" )
387390 }
388391 }
389392
390- return nil
393+ return true , nil
391394 }
392395
393396 // We have a linked Discord account, so save the message contents (regardless of
394397 // whether we create a snippet or not).
395398 if msg .OriginalHasFields ("content" ) {
399+ newContent := CleanUpMarkdown (ctx , msg .Content )
400+ contentChanged = interned .MessageContent == nil || interned .MessageContent .LastContent != newContent
401+
396402 _ , err := dbConn .Exec (ctx ,
397403 `
398404 INSERT INTO discord_message_content (message_id, discord_id, last_content)
@@ -403,10 +409,10 @@ func SaveMessageContents(
403409 ` ,
404410 interned .Message .ID ,
405411 interned .DiscordUser .ID ,
406- CleanUpMarkdown ( ctx , msg . Content ) ,
412+ newContent ,
407413 )
408414 if err != nil {
409- return oops .New (err , "failed to create or update message contents" )
415+ return contentChanged , oops .New (err , "failed to create or update message contents" )
410416 }
411417
412418 content , err := db .QueryOne [models.DiscordMessageContent ](ctx , dbConn ,
@@ -420,7 +426,7 @@ func SaveMessageContents(
420426 interned .Message .ID ,
421427 )
422428 if err != nil {
423- return oops .New (err , "failed to fetch message contents" )
429+ return contentChanged , oops .New (err , "failed to fetch message contents" )
424430 }
425431 interned .MessageContent = content
426432 }
@@ -430,7 +436,7 @@ func SaveMessageContents(
430436 for _ , attachment := range msg .Attachments {
431437 _ , err := saveAttachment (ctx , dbConn , & attachment , interned .DiscordUser .HMNUserId , msg .ID )
432438 if err != nil {
433- return oops .New (err , "failed to save attachment" )
439+ return contentChanged , oops .New (err , "failed to save attachment" )
434440 }
435441 }
436442 }
@@ -446,14 +452,14 @@ func SaveMessageContents(
446452 msg .ID ,
447453 )
448454 if err != nil {
449- return oops .New (err , "failed to count existing embeds" )
455+ return contentChanged , oops .New (err , "failed to count existing embeds" )
450456 }
451457 if numSavedEmbeds == 0 {
452458 // No embeds yet, so save new ones
453459 for _ , embed := range msg .Embeds {
454460 _ , err := saveEmbed (ctx , dbConn , & embed , interned .DiscordUser .HMNUserId , msg .ID )
455461 if err != nil {
456- return oops .New (err , "failed to save embed" )
462+ return contentChanged , oops .New (err , "failed to save embed" )
457463 }
458464 }
459465 } else if len (msg .Embeds ) > 0 {
@@ -466,12 +472,12 @@ func SaveMessageContents(
466472 msg .ID ,
467473 )
468474 if err != nil {
469- return oops .New (err , "failed to delete embeds" )
475+ return contentChanged , oops .New (err , "failed to delete embeds" )
470476 }
471477 }
472478 }
473479
474- return nil
480+ return contentChanged , nil
475481}
476482
477483var discordDownloadClient = & http.Client {
0 commit comments