From 9b07c5af05a8be8114af860893d68614e4ee5ca2 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Tue, 14 Apr 2020 00:42:59 +0900 Subject: リモートのカスタム絵文字リアクションを表示できるように (#6239) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * リモートのカスタム絵文字リアクションを表示できるように * AP * DBマイグレーション * ローカルのリアクションの. * fix * fix * fix * space --- src/remote/activitypub/kernel/like.ts | 4 +++- src/remote/activitypub/renderer/like.ts | 34 +++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src/remote/activitypub') diff --git a/src/remote/activitypub/kernel/like.ts b/src/remote/activitypub/kernel/like.ts index b25f80aedc..a877110303 100644 --- a/src/remote/activitypub/kernel/like.ts +++ b/src/remote/activitypub/kernel/like.ts @@ -1,7 +1,7 @@ import { IRemoteUser } from '../../../models/entities/user'; import { ILike, getApId } from '../type'; import create from '../../../services/note/reaction/create'; -import { fetchNote } from '../models/note'; +import { fetchNote, extractEmojis } from '../models/note'; export default async (actor: IRemoteUser, activity: ILike) => { const targetUri = getApId(activity.object); @@ -11,6 +11,8 @@ export default async (actor: IRemoteUser, activity: ILike) => { if (actor.id === note.userId) return `skip: cannot react to my note`; + await extractEmojis(activity.tag || [], actor.host).catch(() => null); + await create(actor, note, activity._misskey_reaction || activity.content || activity.name); return `ok`; }; diff --git a/src/remote/activitypub/renderer/like.ts b/src/remote/activitypub/renderer/like.ts index e36a3ab0d6..d4dd3663d4 100644 --- a/src/remote/activitypub/renderer/like.ts +++ b/src/remote/activitypub/renderer/like.ts @@ -1,12 +1,30 @@ import config from '../../../config'; import { NoteReaction } from '../../../models/entities/note-reaction'; import { Note } from '../../../models/entities/note'; +import { Emojis } from '../../../models'; +import renderEmoji from './emoji'; -export const renderLike = (noteReaction: NoteReaction, note: Note) => ({ - type: 'Like', - id: `${config.url}/likes/${noteReaction.id}`, - actor: `${config.url}/users/${noteReaction.userId}`, - object: note.uri ? note.uri : `${config.url}/notes/${noteReaction.noteId}`, - content: noteReaction.reaction, - _misskey_reaction: noteReaction.reaction -}); +export const renderLike = async (noteReaction: NoteReaction, note: Note) => { + const reaction = noteReaction.reaction; + + const object = { + type: 'Like', + id: `${config.url}/likes/${noteReaction.id}`, + actor: `${config.url}/users/${noteReaction.userId}`, + object: note.uri ? note.uri : `${config.url}/notes/${noteReaction.noteId}`, + content: reaction, + _misskey_reaction: reaction + } as any; + + if (reaction.startsWith(':')) { + const name = reaction.replace(/:/g, ''); + const emoji = await Emojis.findOne({ + name, + host: null + }); + + if (emoji) object.tag = [ renderEmoji(emoji) ]; + } + + return object; +}; -- cgit v1.2.3-freya