diff options
| author | Mar0xy <marie@kaifa.ch> | 2023-10-14 12:11:23 +0200 |
|---|---|---|
| committer | Mar0xy <marie@kaifa.ch> | 2023-10-14 12:11:23 +0200 |
| commit | e11630bdb25acd454639ba5f5f135cd9700607dd (patch) | |
| tree | 85bf4c17128e45685e10e5e0a5a3bb06d29a04c1 /packages/backend/src/core/NoteCreateService.ts | |
| parent | merge: Upstream & New Changes (diff) | |
| parent | perf(backend): tweak populateMyReaction (diff) | |
| download | sharkey-e11630bdb25acd454639ba5f5f135cd9700607dd.tar.gz sharkey-e11630bdb25acd454639ba5f5f135cd9700607dd.tar.bz2 sharkey-e11630bdb25acd454639ba5f5f135cd9700607dd.zip | |
merge: Nyaize post on create, Tweak performance
Diffstat (limited to 'packages/backend/src/core/NoteCreateService.ts')
| -rw-r--r-- | packages/backend/src/core/NoteCreateService.ts | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 64d2880ba1..6263c9ebbd 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -55,6 +55,7 @@ import { MetaService } from '@/core/MetaService.js'; import { SearchService } from '@/core/SearchService.js'; import { FeaturedService } from '@/core/FeaturedService.js'; import { RedisTimelineService } from '@/core/RedisTimelineService.js'; +import { nyaize } from '@/misc/nyaize.js'; type NotificationType = 'reply' | 'renote' | 'quote' | 'mention'; @@ -223,7 +224,11 @@ export class NoteCreateService implements OnApplicationShutdown { host: MiUser['host']; createdAt: MiUser['createdAt']; isBot: MiUser['isBot']; + isCat: MiUser['isCat']; + speakAsCat: MiUser['speakAsCat']; }, data: Option, silent = false): Promise<MiNote> { + let patsedText: mfm.MfmNode[] | null = null; + // チャンネル外にリプライしたら対象のスコープに合わせる // (クライアントサイドでやっても良い処理だと思うけどとりあえずサーバーサイドで) if (data.reply && data.channel && data.reply.channelId !== data.channel.id) { @@ -302,6 +307,25 @@ export class NoteCreateService implements OnApplicationShutdown { data.text = data.text.slice(0, DB_MAX_NOTE_TEXT_LENGTH); } data.text = data.text.trim(); + + if (user.isCat && user.speakAsCat) { + patsedText = patsedText ?? mfm.parse(data.text); + function nyaizeNode(node: mfm.MfmNode) { + if (node.type === 'quote') return; + if (node.type === 'text') { + node.props.text = nyaize(node.props.text); + } + if (node.children) { + for (const child of node.children) { + nyaizeNode(child); + } + } + } + for (const node of patsedText) { + nyaizeNode(node); + } + data.text = mfm.toString(patsedText); + } } else { data.text = null; } @@ -312,7 +336,7 @@ export class NoteCreateService implements OnApplicationShutdown { // Parse MFM if needed if (!tags || !emojis || !mentionedUsers) { - const tokens = data.text ? mfm.parse(data.text)! : []; + const tokens = patsedText ?? (data.text ? mfm.parse(data.text)! : []); const cwTokens = data.cw ? mfm.parse(data.cw)! : []; const choiceTokens = data.poll && data.poll.choices ? concat(data.poll.choices.map(choice => mfm.parse(choice)!)) |