From 8aea2c5d8d580548b3233d0e7cc112f46ed0166e Mon Sep 17 00:00:00 2001 From: sup39 Date: Sat, 7 Oct 2023 14:20:06 +0900 Subject: [PATCH 01/28] fix: [page] adding child blocks to section block --- packages/client/src/pages/page-editor/els/page-editor.el.if.vue | 1 + .../client/src/pages/page-editor/els/page-editor.el.section.vue | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/client/src/pages/page-editor/els/page-editor.el.if.vue b/packages/client/src/pages/page-editor/els/page-editor.el.if.vue index 6f436e9d4c..6b32ff1bf7 100644 --- a/packages/client/src/pages/page-editor/els/page-editor.el.if.vue +++ b/packages/client/src/pages/page-editor/els/page-editor.el.if.vue @@ -66,6 +66,7 @@ const props = withDefaults( }, }, ); +props.value.children ??= []; const getPageBlockList = inject<(any) => any>("getPageBlockList"); diff --git a/packages/client/src/pages/page-editor/els/page-editor.el.section.vue b/packages/client/src/pages/page-editor/els/page-editor.el.section.vue index d4b28e13cb..476b2340ea 100644 --- a/packages/client/src/pages/page-editor/els/page-editor.el.section.vue +++ b/packages/client/src/pages/page-editor/els/page-editor.el.section.vue @@ -40,6 +40,7 @@ const props = withDefaults( }, }, ); +props.value.children ??= []; const getPageBlockList = inject<(any) => any>("getPageBlockList"); From 1b50274a9340f9e8f6bdf15cad6fb2eee32953be Mon Sep 17 00:00:00 2001 From: sup39 Date: Sat, 7 Oct 2023 23:04:09 +0900 Subject: [PATCH 02/28] fix: [page] list "My Pages" properly --- packages/client/src/pages/pages.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/client/src/pages/pages.vue b/packages/client/src/pages/pages.vue index 3308730d06..5476c58895 100644 --- a/packages/client/src/pages/pages.vue +++ b/packages/client/src/pages/pages.vue @@ -23,7 +23,7 @@ @swiper="setSwiperRef" @slide-change="onSlideChange" > - +
- +
- +
Date: Sun, 8 Oct 2023 16:23:16 +0200 Subject: [PATCH 03/28] fix: empty array causes parse error on server start --- chart/templates/_helpers.tpl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl index a7b4b9d328..e63c70acab 100644 --- a/chart/templates/_helpers.tpl +++ b/chart/templates/_helpers.tpl @@ -217,8 +217,7 @@ id: 'aid' #maxCaptionLength: 1500 # Reserved usernames that only the administrator can register with -reservedUsernames: -{{ .Values.firefish.reservedUsernames | toYaml }} +reservedUsernames: {{ .Values.firefish.reservedUsernames | toJson }} # Whether disable HSTS #disableHsts: true @@ -265,8 +264,7 @@ reservedUsernames: # Proxy remote files (default: false) #proxyRemoteFiles: true -allowedPrivateNetworks: -{{ .Values.firefish.allowedPrivateNetworks | toYaml }} +allowedPrivateNetworks: {{ .Values.firefish.allowedPrivateNetworks | toJson }} # TWA #twa: From 22f65d512cfe4906523dd4b4f2a513cc562ac2cc Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 10 Oct 2023 18:02:07 +0000 Subject: [PATCH 04/28] chore: Translated using Weblate (Japanese) Currently translated at 99.6% (1857 of 1863 strings) Translation: Firefish/locales Translate-URL: https://hosted.weblate.org/projects/firefish/locales/ja/ --- locales/ja-JP.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 7df6313407..e24d629ede 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -615,7 +615,7 @@ emptyToDisableSmtpAuth: "ユーザー名とパスワードを空欄にするこ smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する" smtpSecureInfo: "STARTTLS使用時はオフにします。" testEmail: "配信テスト" -wordMute: "ワードミュート" +wordMute: "単語または言語のミュート" regexpError: "正規表現エラー" regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが発生しました:" instanceMute: "サーバーミュート" @@ -1990,3 +1990,4 @@ confirm: 確認 exportZip: ZIPをエクスポート openServerInfo: "投稿内のサーバー名をクリックでサーバー情報を開く" indexableDescription: MastodonやFirefishなどの検索機能に、あなたの投稿が表示されるのを許可します。 +clickToShowPatterns: クリックしてトラックを表示 From eea06dc2a53a38727b29a5e24f646fd91d2254b0 Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 10 Oct 2023 18:04:09 +0000 Subject: [PATCH 05/28] chore: Translated using Weblate (Japanese) Currently translated at 100.0% (1863 of 1863 strings) Translation: Firefish/locales Translate-URL: https://hosted.weblate.org/projects/firefish/locales/ja/ --- locales/ja-JP.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index e24d629ede..2325d6b748 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -693,7 +693,7 @@ no: "いいえ" driveFilesCount: "ドライブのファイル数" driveUsage: "ドライブ使用量" noCrawle: "クローラーによるインデックスを拒否" -noCrawleDescription: "検索エンジンにあなたのプロフィールや投稿、ページなどのコンテンツを登録(インデックス)しないよう要請します。" +noCrawleDescription: "Web検索にあなたのプロフィールや投稿、ページなどのコンテンツを登録(インデックス)しないよう要請します。" lockedAccountInfo: "フォローを承認制にしても、投稿の公開範囲を「フォロワー」にしない限り、誰でもあなたの投稿を見られます。" alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にする" loadRawImages: "添付画像のサムネイルをオリジナル画質にする" @@ -810,7 +810,7 @@ instanceSecurity: "サーバーのセキュリティー" secureModeInfo: "認証情報の無いリモートサーバーからのリクエストに応えません。" privateMode: "非公開モード" privateModeInfo: "有効にすると、許可したサーバーのみからリクエストを受け付けます。" -allowedInstances: "許可されたサーバー" +allowedInstances: "許可するサーバー" allowedInstancesDescription: "許可したいサーバーのホストを改行で区切って設定します。非公開モードだけで有効です。" previewNoteText: "本文をプレビュー" customCss: "カスタムCSS" @@ -1991,3 +1991,5 @@ exportZip: ZIPをエクスポート openServerInfo: "投稿内のサーバー名をクリックでサーバー情報を開く" indexableDescription: MastodonやFirefishなどの検索機能に、あなたの投稿が表示されるのを許可します。 clickToShowPatterns: クリックしてトラックを表示 +vibrate: 振動を有効にする +indexable: 投稿検索に登録 From d28ec55744ba2dbdef05ebc36ae14ed000b943bc Mon Sep 17 00:00:00 2001 From: "@DDoSkiray@ddoskey.com" <+DDoSkiray+ddoskey.com@users.noreply.hosted.weblate.org> Date: Tue, 10 Oct 2023 18:07:15 +0000 Subject: [PATCH 06/28] chore: Translated using Weblate (Japanese) Currently translated at 100.0% (1863 of 1863 strings) Translation: Firefish/locales Translate-URL: https://hosted.weblate.org/projects/firefish/locales/ja/ --- locales/ja-JP.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 2325d6b748..964e5d0235 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1504,7 +1504,7 @@ _profile: youCanIncludeHashtags: "ハッシュタグを含められます。" metadata: "追加情報" metadataEdit: "追加情報を編集" - metadataDescription: "プロフィールに追加情報を表示できます。{a}タグまたは{l}タグを{rel}とともに追加すると、プロフィールのリンクを本人認証できます。" + metadataDescription: "プロフィールに追加情報を表示できます。プロフィールにリンクしたウェブサイトやSNSアカウントにタグ(または{a}タグ)を追加すると、そのリンクを本人認証できます。" metadataLabel: "ラベル" metadataContent: "内容" changeAvatar: "アバター画像を変更" From 8b2263b0f90e9fa4367c011cf4912d6fb9097bbf Mon Sep 17 00:00:00 2001 From: ThatOneCalculator Date: Tue, 10 Oct 2023 12:22:46 -0700 Subject: [PATCH 07/28] fix: :bug: list "My Posts" properly in gallery ref: !10618 --- packages/client/src/pages/gallery/index.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/client/src/pages/gallery/index.vue b/packages/client/src/pages/gallery/index.vue index 0c9755181f..dc87fbca44 100644 --- a/packages/client/src/pages/gallery/index.vue +++ b/packages/client/src/pages/gallery/index.vue @@ -24,7 +24,7 @@ @swiper="setSwiperRef" @slide-change="onSlideChange" > - + @@ -169,7 +137,6 @@ import { apiUrl, host as configHost } from "@/config"; import { byteify, hexify } from "@/scripts/2fa"; import * as os from "@/os"; import { login } from "@/account"; -import { instance } from "@/instance"; import { i18n } from "@/i18n"; const signing = ref(false); @@ -184,8 +151,6 @@ const queryingKey = ref(false); const hCaptchaResponse = ref(null); const reCaptchaResponse = ref(null); -const meta = computed(() => instance); - const emit = defineEmits<{ (ev: "login", v: any): void; }>(); diff --git a/packages/client/src/pages/admin/index.vue b/packages/client/src/pages/admin/index.vue index ed9f9f612e..7deffdddd5 100644 --- a/packages/client/src/pages/admin/index.vue +++ b/packages/client/src/pages/admin/index.vue @@ -267,14 +267,6 @@ const menuDef = computed(() => [ to: "/admin/relays", active: currentPage.value?.route.name === "relays", }, - { - icon: "ph-plug ph-bold ph-lg", - text: i18n.ts.integration, - to: "/admin/integrations", - active: - currentPage.value?.route.name === - "integrations", - }, { icon: "ph-prohibit ph-bold ph-lg", text: i18n.ts.instanceBlocking, diff --git a/packages/client/src/pages/admin/integrations.discord.vue b/packages/client/src/pages/admin/integrations.discord.vue deleted file mode 100644 index 8be7582d38..0000000000 --- a/packages/client/src/pages/admin/integrations.discord.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - diff --git a/packages/client/src/pages/admin/integrations.github.vue b/packages/client/src/pages/admin/integrations.github.vue deleted file mode 100644 index 2f3416b086..0000000000 --- a/packages/client/src/pages/admin/integrations.github.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - diff --git a/packages/client/src/pages/admin/integrations.vue b/packages/client/src/pages/admin/integrations.vue deleted file mode 100644 index 505080d9e2..0000000000 --- a/packages/client/src/pages/admin/integrations.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - diff --git a/packages/client/src/pages/settings/index.vue b/packages/client/src/pages/settings/index.vue index 6bb3f9809d..8d73547161 100644 --- a/packages/client/src/pages/settings/index.vue +++ b/packages/client/src/pages/settings/index.vue @@ -116,12 +116,6 @@ const menuDef = computed(() => [ to: "/settings/email", active: currentPage.value?.route.name === "email", }, - { - icon: "ph-share-network ph-bold ph-lg", - text: i18n.ts.integration, - to: "/settings/integration", - active: currentPage.value?.route.name === "integration", - }, { icon: "ph-lock ph-bold ph-lg", text: i18n.ts.security, diff --git a/packages/client/src/pages/settings/integration.vue b/packages/client/src/pages/settings/integration.vue deleted file mode 100644 index 2eb48a547e..0000000000 --- a/packages/client/src/pages/settings/integration.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - diff --git a/packages/client/src/router.ts b/packages/client/src/router.ts index 60e9d37c58..dd1621777e 100644 --- a/packages/client/src/router.ts +++ b/packages/client/src/router.ts @@ -103,11 +103,6 @@ export const routes = [ name: "email", component: page(() => import("./pages/settings/email.vue")), }, - { - path: "/integration", - name: "integration", - component: page(() => import("./pages/settings/integration.vue")), - }, { path: "/security", name: "security", @@ -525,11 +520,6 @@ export const routes = [ name: "relays", component: page(() => import("./pages/admin/relays.vue")), }, - { - path: "/integrations", - name: "integrations", - component: page(() => import("./pages/admin/integrations.vue")), - }, { path: "/instance-block", name: "instance-block", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa0a532b86..464f2fa4c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,9 +312,6 @@ importers: nsfwjs: specifier: 2.4.2 version: 2.4.2(@tensorflow/tfjs@4.2.0) - oauth: - specifier: ^0.10.0 - version: 0.10.0 opencc-js: specifier: ^1.0.5 version: 1.0.5 From 2efb22de40556b481627ede6d768ace8dc8ab1f2 Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 17 Oct 2023 04:56:29 +0900 Subject: [PATCH 19/28] fix typo --- packages/backend/src/server/api/endpoints/i/known-as.ts | 2 +- packages/backend/src/server/api/endpoints/i/move.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/i/known-as.ts b/packages/backend/src/server/api/endpoints/i/known-as.ts index 0d0c06180a..384cbd7c34 100644 --- a/packages/backend/src/server/api/endpoints/i/known-as.ts +++ b/packages/backend/src/server/api/endpoints/i/known-as.ts @@ -33,7 +33,7 @@ export const meta = { id: "4362f8dc-731f-4ad8-a694-be2a88922a24", }, uriNull: { - message: "User ActivityPup URI is null.", + message: "User ActivityPub URI is null.", code: "URI_NULL", id: "bf326f31-d430-4f97-9933-5d61e4d48a23", }, diff --git a/packages/backend/src/server/api/endpoints/i/move.ts b/packages/backend/src/server/api/endpoints/i/move.ts index d972aaf1d9..2c064e1d66 100644 --- a/packages/backend/src/server/api/endpoints/i/move.ts +++ b/packages/backend/src/server/api/endpoints/i/move.ts @@ -53,12 +53,12 @@ export const meta = { id: "fcd2eef9-a9b2-4c4f-8624-038099e90aa5", }, uriNull: { - message: "User ActivityPup URI is null.", + message: "User ActivityPub URI is null.", code: "URI_NULL", id: "bf326f31-d430-4f97-9933-5d61e4d48a23", }, localUriNull: { - message: "Local User ActivityPup URI is null.", + message: "Local User ActivityPub URI is null.", code: "URI_NULL", id: "95ba11b9-90e8-43a5-ba16-7acc1ab32e71", }, From 36a4f30377e0517b3f96d21beb71cbb1726f7548 Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 17 Oct 2023 06:24:24 +0900 Subject: [PATCH 20/28] chore: update lockfile --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 464f2fa4c9..729ec4b4aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -280,7 +280,7 @@ importers: specifier: 7.0.2 version: 7.0.2(@types/koa@2.13.8)(ejs@3.1.9)(pug@3.0.2) megalodon: - specifier: ^8.1.1 + specifier: 8.1.1 version: 8.1.1 meilisearch: specifier: 0.34.1 From ddbe213f594dcdd2bd67392c485a19c9ad2c168e Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 17 Oct 2023 06:32:36 +0900 Subject: [PATCH 21/28] feat: show all reacted users initially in reactions tab --- packages/client/src/components/MkReactedUsers.vue | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/client/src/components/MkReactedUsers.vue b/packages/client/src/components/MkReactedUsers.vue index 6e0b0fc8c5..e685f90729 100644 --- a/packages/client/src/components/MkReactedUsers.vue +++ b/packages/client/src/components/MkReactedUsers.vue @@ -47,11 +47,11 @@ const props = defineProps<{ }>(); const note = ref(); -const tab = ref(); +const tab = ref(null); const reactions = ref(); const users = ref(); -watch(tab, async () => { +async function updateUsers(): void { const res = await os.api("notes/reactions", { noteId: props.noteId, type: tab.value, @@ -59,15 +59,17 @@ watch(tab, async () => { }); users.value = res.map((x) => x.user); -}); +} + +watch(tab, updateUsers); onMounted(() => { os.api("notes/show", { noteId: props.noteId, - }).then((res) => { + }).then(async (res) => { reactions.value = Object.keys(res.reactions); - tab.value = reactions.value[0]; note.value = res; + await updateUsers(); }); }); From 3b9f1612510eda41f182168f61f6367af4ce3802 Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 17 Oct 2023 07:14:01 +0900 Subject: [PATCH 22/28] chore: minor refactor of check-hit-antenna --- .../backend/src/misc/check-hit-antenna.ts | 47 +------------------ packages/backend/src/services/note/create.ts | 4 +- packages/backend/src/services/note/read.ts | 19 -------- 3 files changed, 4 insertions(+), 66 deletions(-) diff --git a/packages/backend/src/misc/check-hit-antenna.ts b/packages/backend/src/misc/check-hit-antenna.ts index 1ff09d6299..3ec019273f 100644 --- a/packages/backend/src/misc/check-hit-antenna.ts +++ b/packages/backend/src/misc/check-hit-antenna.ts @@ -1,11 +1,7 @@ import type { Antenna } from "@/models/entities/antenna.js"; import type { Note } from "@/models/entities/note.js"; import type { User } from "@/models/entities/user.js"; -import { - UserListJoinings, - UserGroupJoinings, - Blockings, -} from "@/models/index.js"; +import { Blockings } from "@/models/index.js"; import { getFullApAccount } from "./convert-host.js"; import * as Acct from "@/misc/acct.js"; import type { Packed } from "./schema.js"; @@ -13,17 +9,10 @@ import { Cache } from "./cache.js"; const blockingCache = new Cache("blocking", 60 * 5); -// NOTE: フォローしているユーザーのノート、リストのユーザーのノート、グループのユーザーのノート指定はパフォーマンス上の理由で無効になっている - -/** - * noteUserFollowers / antennaUserFollowing はどちらか一方が指定されていればよい - */ export async function checkHitAntenna( antenna: Antenna, note: Note | Packed<"Note">, noteUser: { id: User["id"]; username: string; host: string | null }, - noteUserFollowers?: User["id"][], - antennaUserFollowing?: User["id"][], ): Promise { if (note.visibility === "specified") return false; if (note.visibility === "home") return false; @@ -36,41 +25,9 @@ export async function checkHitAntenna( ); if (blockings.some((blocking) => blocking === antenna.userId)) return false; - if (note.visibility === "followers") { - if (noteUserFollowers && !noteUserFollowers.includes(antenna.userId)) - return false; - if (antennaUserFollowing && !antennaUserFollowing.includes(note.userId)) - return false; - } - if (!antenna.withReplies && note.replyId != null) return false; - if (antenna.src === "home") { - if (noteUserFollowers && !noteUserFollowers.includes(antenna.userId)) - return false; - if (antennaUserFollowing && !antennaUserFollowing.includes(note.userId)) - return false; - } else if (antenna.src === "list") { - const listUsers = ( - await UserListJoinings.findBy({ - userListId: antenna.userListId!, - }) - ).map((x) => x.userId); - - if (!listUsers.includes(note.userId)) return false; - } else if (antenna.src === "group") { - const joining = await UserGroupJoinings.findOneByOrFail({ - id: antenna.userGroupJoiningId!, - }); - - const groupUsers = ( - await UserGroupJoinings.findBy({ - userGroupId: joining.userGroupId, - }) - ).map((x) => x.userId); - - if (!groupUsers.includes(note.userId)) return false; - } else if (antenna.src === "users") { + if (antenna.src === "users") { const accts = antenna.users.map((x) => { const { username, host } = Acct.parse(x); return getFullApAccount(username, host).toLowerCase(); diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts index 632cb960e2..f4891ff98b 100644 --- a/packages/backend/src/services/note/create.ts +++ b/packages/backend/src/services/note/create.ts @@ -1,6 +1,6 @@ import * as mfm from "mfm-js"; -import es from "../../db/elasticsearch.js"; -import sonic from "../../db/sonic.js"; +import es from "@/db/elasticsearch.js"; +import sonic from "@/db/sonic.js"; import { publishMainStream, publishNotesStream, diff --git a/packages/backend/src/services/note/read.ts b/packages/backend/src/services/note/read.ts index 5e61fe95d8..07d277d84f 100644 --- a/packages/backend/src/services/note/read.ts +++ b/packages/backend/src/services/note/read.ts @@ -9,8 +9,6 @@ import { } from "@/models/index.js"; import { Not, IsNull, In } from "typeorm"; import type { Channel } from "@/models/entities/channel.js"; -import { checkHitAntenna } from "@/misc/check-hit-antenna.js"; -import { getAntennas } from "@/misc/antenna-cache.js"; import { readNotificationByQuery } from "@/server/api/common/read-notification.js"; import type { Packed } from "@/misc/schema.js"; @@ -66,23 +64,6 @@ export default async function ( if (note.channelId && followingChannels.has(note.channelId)) { readChannelNotes.push(note); } - - // if (note.user != null) { - // // たぶんnullになることは無いはずだけど一応 - // for (const antenna of myAntennas) { - // if ( - // await checkHitAntenna( - // antenna, - // note, - // note.user, - // undefined, - // Array.from(following), - // ) - // ) { - // readAntennaNotes.push(note); - // } - // } - // } } if ( From 93769b79b1dcaaf984bbae5ed2c57b8c69171725 Mon Sep 17 00:00:00 2001 From: naskya Date: Tue, 17 Oct 2023 07:28:58 +0900 Subject: [PATCH 23/28] chore: minor refactor of check-word-mute --- packages/backend/src/misc/check-word-mute.ts | 12 ++-------- .../api/stream/channels/global-timeline.ts | 2 +- .../api/stream/channels/home-timeline.ts | 2 +- .../api/stream/channels/hybrid-timeline.ts | 2 +- .../api/stream/channels/local-timeline.ts | 2 +- .../stream/channels/recommended-timeline.ts | 2 +- packages/backend/src/services/note/create.ts | 22 +++++++++---------- packages/client/src/components/MkNote.vue | 3 +-- .../client/src/components/MkNoteDetailed.vue | 2 +- packages/client/src/components/MkNoteSub.vue | 2 +- .../client/src/scripts/check-word-mute.ts | 15 ++++++------- 11 files changed, 27 insertions(+), 39 deletions(-) diff --git a/packages/backend/src/misc/check-word-mute.ts b/packages/backend/src/misc/check-word-mute.ts index a75beed9d1..88f3714ab9 100644 --- a/packages/backend/src/misc/check-word-mute.ts +++ b/packages/backend/src/misc/check-word-mute.ts @@ -1,6 +1,5 @@ import RE2 from "re2"; import type { Note } from "@/models/entities/note.js"; -import type { User } from "@/models/entities/user.js"; type NoteLike = { userId: Note["userId"]; @@ -9,10 +8,6 @@ type NoteLike = { cw?: Note["cw"]; }; -type UserLike = { - id: User["id"]; -}; - function checkWordMute( note: NoteLike, mutedWords: Array, @@ -61,13 +56,10 @@ function checkWordMute( export async function getWordHardMute( note: NoteLike, - me: UserLike | null | undefined, + meId: string | null | undefined, mutedWords: Array, ): Promise { - // 自分自身 - if (me && note.userId === me.id) { - return false; - } + if (note.userId === meId) return false; if (mutedWords.length > 0) { return ( diff --git a/packages/backend/src/server/api/stream/channels/global-timeline.ts b/packages/backend/src/server/api/stream/channels/global-timeline.ts index f2aca7e3ca..e750ac92b1 100644 --- a/packages/backend/src/server/api/stream/channels/global-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/global-timeline.ts @@ -68,7 +68,7 @@ export default class extends Channel { // そのためレコードが存在するかのチェックでは不十分なので、改めてgetWordHardMuteを呼んでいる if ( this.userProfile && - (await getWordHardMute(note, this.user, this.userProfile.mutedWords)) + (await getWordHardMute(note, this.user?.id, this.userProfile.mutedWords)) ) return; diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts index 52e2dc2a97..5aafe865b3 100644 --- a/packages/backend/src/server/api/stream/channels/home-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts @@ -67,7 +67,7 @@ export default class extends Channel { // そのためレコードが存在するかのチェックでは不十分なので、改めてgetWordHardMuteを呼んでいる if ( this.userProfile && - (await getWordHardMute(note, this.user, this.userProfile.mutedWords)) + (await getWordHardMute(note, this.user?.id, this.userProfile.mutedWords)) ) return; diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts index 6e2da514f5..2ec53a3fa9 100644 --- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts @@ -84,7 +84,7 @@ export default class extends Channel { // そのためレコードが存在するかのチェックでは不十分なので、改めてgetWordHardMuteを呼んでいる if ( this.userProfile && - (await getWordHardMute(note, this.user, this.userProfile.mutedWords)) + (await getWordHardMute(note, this.user?.id, this.userProfile.mutedWords)) ) return; diff --git a/packages/backend/src/server/api/stream/channels/local-timeline.ts b/packages/backend/src/server/api/stream/channels/local-timeline.ts index 2cc286b17f..40e38c24f0 100644 --- a/packages/backend/src/server/api/stream/channels/local-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/local-timeline.ts @@ -60,7 +60,7 @@ export default class extends Channel { // そのためレコードが存在するかのチェックでは不十分なので、改めてgetWordHardMuteを呼んでいる if ( this.userProfile && - (await getWordHardMute(note, this.user, this.userProfile.mutedWords)) + (await getWordHardMute(note, this.user?.id, this.userProfile.mutedWords)) ) return; diff --git a/packages/backend/src/server/api/stream/channels/recommended-timeline.ts b/packages/backend/src/server/api/stream/channels/recommended-timeline.ts index 186b120320..bbbc4e7a9a 100644 --- a/packages/backend/src/server/api/stream/channels/recommended-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/recommended-timeline.ts @@ -82,7 +82,7 @@ export default class extends Channel { // そのためレコードが存在するかのチェックでは不十分なので、改めてgetWordHardMuteを呼んでいる if ( this.userProfile && - (await getWordHardMute(note, this.user, this.userProfile.mutedWords)) + (await getWordHardMute(note, this.user?.id, this.userProfile.mutedWords)) ) return; diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts index f4891ff98b..cc932060b3 100644 --- a/packages/backend/src/services/note/create.ts +++ b/packages/backend/src/services/note/create.ts @@ -380,18 +380,16 @@ export default async ( ) .then((us) => { for (const u of us) { - getWordHardMute(data, { id: u.userId }, u.mutedWords).then( - (shouldMute) => { - if (shouldMute) { - MutedNotes.insert({ - id: genId(), - userId: u.userId, - noteId: note.id, - reason: "word", - }); - } - }, - ); + getWordHardMute(data, u.userId, u.mutedWords).then((shouldMute) => { + if (shouldMute) { + MutedNotes.insert({ + id: genId(), + userId: u.userId, + noteId: note.id, + reason: "word", + }); + } + }); } }); diff --git a/packages/client/src/components/MkNote.vue b/packages/client/src/components/MkNote.vue index e84482131e..be5144dc59 100644 --- a/packages/client/src/components/MkNote.vue +++ b/packages/client/src/components/MkNote.vue @@ -273,7 +273,6 @@