summaryrefslogtreecommitdiff
path: root/src/remote/activitypub
diff options
context:
space:
mode:
Diffstat (limited to 'src/remote/activitypub')
-rw-r--r--src/remote/activitypub/kernel/like.ts4
-rw-r--r--src/remote/activitypub/renderer/like.ts34
2 files changed, 29 insertions, 9 deletions
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;
+};