diff --git a/CHANGELOG.md b/CHANGELOG.md index 130eb00b771c5d7fd0d8a3e652c2b9dbd4c9e8f5..22b5506f28cc427983812f346b660140bf4969cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Server - Feat: モデレータ権é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãŒå…¨å“¡7日間活動ã—ãªã‹ã£ãŸå ´åˆã¯è‡ªå‹•çš„ã«æ‹›å¾…制ã¸ã¨ç§»è¡Œã™ã‚‹ã‚ˆã†ã« ( #13437 ) - Fix: `admin/emoji/update`エンドãƒã‚¤ãƒ³ãƒˆã®idã®ã¿æŒ‡å®šã—ãŸæ™‚ä¸æ£ãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ãƒã‚°ã‚’ä¿®æ£ +- Fix: RBT有効時ã€ãƒªãƒŽãƒ¼ãƒˆã®ãƒªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒåæ˜ ã•ã‚Œãªã„å•é¡Œã‚’ä¿®æ£ ### Server - Fix: ã‚ューã®ã‚¨ãƒ©ãƒ¼ãƒã‚°ã‚’簡略化ã™ã‚‹ã‚ˆã†ã« diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts index c64e9151a75a2d7e380adb3b68ebf0a832cdd1b7..e530772dd9887fe11f8f18e84f2f3601872cad82 100644 --- a/packages/backend/src/core/entities/NoteEntityService.ts +++ b/packages/backend/src/core/entities/NoteEntityService.ts @@ -22,6 +22,29 @@ import type { ReactionService } from '../ReactionService.js'; import type { UserEntityService } from './UserEntityService.js'; import type { DriveFileEntityService } from './DriveFileEntityService.js'; +function isPureRenote(note: MiNote): note is MiNote & { renoteId: MiNote['id']; renote: MiNote } { + return ( + note.renote != null && + note.reply == null && + note.text == null && + note.cw == null && + (note.fileIds == null || note.fileIds.length === 0) && + !note.hasPoll + ); +} + +function getAppearNoteIds(notes: MiNote[]): Set<string> { + const appearNoteIds = new Set<string>(); + for (const note of notes) { + if (isPureRenote(note)) { + appearNoteIds.add(note.renoteId); + } else { + appearNoteIds.add(note.id); + } + } + return appearNoteIds; +} + @Injectable() export class NoteEntityService implements OnModuleInit { private userEntityService: UserEntityService; @@ -421,7 +444,7 @@ export class NoteEntityService implements OnModuleInit { ) { if (notes.length === 0) return []; - const bufferedReactions = this.meta.enableReactionsBuffering ? await this.reactionsBufferingService.getMany(notes.map(x => x.id)) : null; + const bufferedReactions = this.meta.enableReactionsBuffering ? await this.reactionsBufferingService.getMany([...getAppearNoteIds(notes)]) : null; const meId = me ? me.id : null; const myReactionsMap = new Map<MiNote['id'], string | null>(); @@ -432,7 +455,7 @@ export class NoteEntityService implements OnModuleInit { const oldId = this.idService.gen(Date.now() - 2000); for (const note of notes) { - if (note.renote && (note.text == null && note.fileIds.length === 0)) { // pure renote + if (isPureRenote(note)) { const reactionsCount = Object.values(this.reactionsBufferingService.mergeReactions(note.renote.reactions, bufferedReactions?.get(note.renote.id)?.deltas ?? {})).reduce((a, b) => a + b, 0); if (reactionsCount === 0) { myReactionsMap.set(note.renote.id, null);