From 82d7e472c5d3a98c0a2ead8a831511e876312e3b Mon Sep 17 00:00:00 2001 From: FLY_MC <me@flymc.cc> Date: Wed, 12 Mar 2025 05:35:43 +0800 Subject: [PATCH] backend: merge custom emoji reactions --- packages/backend/src/core/ReactionService.ts | 27 +++++++++++++------ .../components/MkReactionsViewer.details.vue | 2 +- .../src/components/MkReactionsViewer.vue | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts index 4435fc6cd3..4b4fb4779c 100644 --- a/packages/backend/src/core/ReactionService.ts +++ b/packages/backend/src/core/ReactionService.ts @@ -132,19 +132,30 @@ export class ReactionService { } else if (_reaction != null) { const custom = reaction.match(isCustomEmojiRegexp); if (custom) { + const name = custom[1]; const reacterHost = this.utilityService.toPunyNullable(user.host); - const name = custom[1]; - const emoji = reacterHost == null - ? (await this.customEmojiService.localEmojisCache.fetch()).get(name) - : await this.emojisRepository.findOneBy({ - host: reacterHost, - name, - }); + let emoji = null; + let useLocalEmoji = false; + + if (reacterHost != null) { + const localEmoji = (await this.customEmojiService.localEmojisCache.fetch()).get(name); + if (localEmoji) { + emoji = localEmoji; + useLocalEmoji = true; + } else { + emoji = await this.emojisRepository.findOneBy({ + host: reacterHost, + name, + }); + } + } else { + emoji = (await this.customEmojiService.localEmojisCache.fetch()).get(name); + } if (emoji) { if (emoji.roleIdsThatCanBeUsedThisEmojiAsReaction.length === 0 || (await this.roleService.getUserRoles(user.id)).some(r => emoji.roleIdsThatCanBeUsedThisEmojiAsReaction.includes(r.id))) { - reaction = reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`; + reaction = useLocalEmoji ? `:${name}:` : (reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`); // センシティブ if ((note.reactionAcceptance === 'nonSensitiveOnly' || note.reactionAcceptance === 'nonSensitiveOnlyForLocalLikeOnlyForRemote') && emoji.isSensitive) { diff --git a/packages/frontend/src/components/MkReactionsViewer.details.vue b/packages/frontend/src/components/MkReactionsViewer.details.vue index f41a8a40f3..d24e0b15bf 100644 --- a/packages/frontend/src/components/MkReactionsViewer.details.vue +++ b/packages/frontend/src/components/MkReactionsViewer.details.vue @@ -100,4 +100,4 @@ function getReactionName(reaction: string): string { .more { padding-top: 4px; } -</style> \ No newline at end of file +</style> diff --git a/packages/frontend/src/components/MkReactionsViewer.vue b/packages/frontend/src/components/MkReactionsViewer.vue index 8acbdd5a05..0fed933b56 100644 --- a/packages/frontend/src/components/MkReactionsViewer.vue +++ b/packages/frontend/src/components/MkReactionsViewer.vue @@ -112,4 +112,4 @@ watch([() => props.note.reactions, () => props.maxNumber], ([newSource, maxNumbe display: none; } } -</style> \ No newline at end of file +</style>