diff options
Diffstat (limited to 'src/remote/activitypub/renderer/note.ts')
| -rw-r--r-- | src/remote/activitypub/renderer/note.ts | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts index 910e4dba76..8b349526e1 100644 --- a/src/remote/activitypub/renderer/note.ts +++ b/src/remote/activitypub/renderer/note.ts @@ -15,9 +15,10 @@ export default async function renderNote(note: INote, dive = true): Promise<any> : Promise.resolve([]); let inReplyTo; + let inReplyToNote: INote; if (note.replyId) { - const inReplyToNote = await Note.findOne({ + inReplyToNote = await Note.findOne({ _id: note.replyId, }); @@ -134,6 +135,29 @@ export default async function renderNote(note: INote, dive = true): Promise<any> ...apemojis, ]; + const { + choices = [], + expiresAt = null, + multiple = false + } = note.poll || {}; + + const asPoll = note.poll ? { + type: 'Question', + content: toHtml(Object.assign({}, note, { + text: text + })), + _misskey_fallback_content: content, + [expiresAt && expiresAt < new Date() ? 'closed' : 'endTime']: expiresAt, + [multiple ? 'anyOf' : 'oneOf']: choices.map(({ text, votes }) => ({ + type: 'Note', + name: text, + replies: { + type: 'Collection', + totalItems: votes + } + })) + } : {}; + return { id: `${config.url}/notes/${note._id}`, type: 'Note', @@ -149,7 +173,8 @@ export default async function renderNote(note: INote, dive = true): Promise<any> inReplyTo, attachment: files.map(renderDocument), sensitive: files.some(file => file.metadata.isSensitive), - tag + tag, + ...asPoll }; } |