summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/NoteCreateService.ts
diff options
context:
space:
mode:
authorMar0xy <marie@kaifa.ch>2023-10-14 12:11:23 +0200
committerMar0xy <marie@kaifa.ch>2023-10-14 12:11:23 +0200
commite11630bdb25acd454639ba5f5f135cd9700607dd (patch)
tree85bf4c17128e45685e10e5e0a5a3bb06d29a04c1 /packages/backend/src/core/NoteCreateService.ts
parentmerge: Upstream & New Changes (diff)
parentperf(backend): tweak populateMyReaction (diff)
downloadsharkey-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.ts26
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)!))