diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2018-11-02 08:59:40 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2018-11-02 08:59:40 +0900 |
| commit | 80b5fda292efd70cc749910e3672d50c9a70a72e (patch) | |
| tree | a8f287c9c60a532112801d084fcb7d5b8c4e3650 /src/remote/activitypub/renderer/note.ts | |
| parent | Fix bug (diff) | |
| download | misskey-80b5fda292efd70cc749910e3672d50c9a70a72e.tar.gz misskey-80b5fda292efd70cc749910e3672d50c9a70a72e.tar.bz2 misskey-80b5fda292efd70cc749910e3672d50c9a70a72e.zip | |
Remote custom emojis (#3074)
* Remote custom emojis
* んほおおおおお
Diffstat (limited to 'src/remote/activitypub/renderer/note.ts')
| -rw-r--r-- | src/remote/activitypub/renderer/note.ts | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts index b3ce1c03e4..a2c591de2e 100644 --- a/src/remote/activitypub/renderer/note.ts +++ b/src/remote/activitypub/renderer/note.ts @@ -1,12 +1,16 @@ import renderDocument from './document'; import renderHashtag from './hashtag'; import renderMention from './mention'; +import renderEmoji from './emoji'; import config from '../../../config'; import DriveFile, { IDriveFile } from '../../../models/drive-file'; import Note, { INote } from '../../../models/note'; import User from '../../../models/user'; import toHtml from '../misc/get-note-html'; import parseMfm from '../../../mfm/parse'; +import getEmojiNames from '../misc/get-emoji-names'; +import Emoji, { IEmoji } from '../../../models/emoji'; +import { unique } from '../../../prelude/array'; export default async function renderNote(note: INote, dive = true): Promise<any> { const promisedFiles: Promise<IDriveFile[]> = note.fileIds @@ -75,10 +79,6 @@ export default async function renderNote(note: INote, dive = true): Promise<any> const hashtagTags = (note.tags || []).map(tag => renderHashtag(tag)); const mentionTags = mentionedUsers.map(u => renderMention(u)); - const tag = [ - ...hashtagTags, - ...mentionTags, - ]; const files = await promisedFiles; @@ -108,12 +108,24 @@ export default async function renderNote(note: INote, dive = true): Promise<any> }).join(''); } + const content = toHtml(Object.assign({}, note, { text })); + + const emojiNames = unique(getEmojiNames(content)); + const emojis = await getEmojis(emojiNames); + const apemojis = emojis.map(emoji => renderEmoji(emoji)); + + const tag = [ + ...hashtagTags, + ...mentionTags, + ...apemojis, + ]; + return { id: `${config.url}/notes/${note._id}`, type: 'Note', attributedTo, summary: note.cw, - content: toHtml(Object.assign({}, note, { text })), + content, _misskey_content: text, published: note.createdAt.toISOString(), to, @@ -124,3 +136,18 @@ export default async function renderNote(note: INote, dive = true): Promise<any> tag }; } + +async function getEmojis(names: string[]): Promise<IEmoji[]> { + if (names == null || names.length < 1) return []; + + const emojis = await Promise.all( + names.map(async name => { + return await Emoji.findOne({ + name, + host: null + }); + }) + ); + + return emojis.filter(emoji => emoji != null); +} |