diff --git a/locales/en-US.yml b/locales/en-US.yml
index 0143bc48e..a20a0a127 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -1735,6 +1735,7 @@ _wordMute:
muteWords: "Muted words"
muteWordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
+ hideMutedNotes: "Hide notes containing muted words"
_instanceMute:
instanceMuteDescription: "This will mute any notes/renotes from the listed instances, including those of users replying to a user from a muted instance."
instanceMuteDescription2: "Separate with newlines"
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 1a202df6a..0e5c193d2 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -1865,6 +1865,7 @@ export interface Locale {
"muteWords": string;
"muteWordsDescription": string;
"muteWordsDescription2": string;
+ "hideMutedNotes": string;
};
"_instanceMute": {
"instanceMuteDescription": string;
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 825cfe567..11f331485 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1770,6 +1770,7 @@ _wordMute:
muteWords: "ミュートするワード"
muteWordsDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。"
muteWordsDescription2: "キーワードをスラッシュで囲むと正規表現になります。"
+ hideMutedNotes: "ミュートされた単語を含むノートを非表示にする"
_instanceMute:
instanceMuteDescription: "ミュートしたサーバーのユーザーへの返信を含めて、設定したサーバーの全てのノートとRenoteをミュートします。"
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index db8545b2d..6cb9dd7e4 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -133,7 +133,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -244,6 +244,7 @@ const translation = ref(null);
const translating = ref(false);
const showTicker = (defaultStore.state.instanceTicker === 'always') || (defaultStore.state.instanceTicker === 'remote' && appearNote.user.instance);
const canRenote = computed(() => ['public', 'home'].includes(appearNote.visibility) || (appearNote.visibility === 'followers' && appearNote.userId === $i.id));
+const hideMutedNotes = defaultStore.state.hideMutedNotes;
let renoteCollapsed = $ref(defaultStore.state.collapseRenotes && isRenote && (($i && ($i.id === note.userId || $i.id === appearNote.userId)) || (appearNote.myReaction != null)));
function checkMute(note: Misskey.entities.Note, mutedWords: Array | undefined | null): boolean {
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index 313b5efc4..e8cb1be45 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -46,6 +46,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.showNoteActionsOnlyHover }}
{{ i18n.ts.showClipButtonInNoteFooter }}
{{ i18n.ts.collapseRenotes }}
+ {{ i18n.ts._wordMute.hideMutedNotes }}
{{ i18n.ts.enableAdvancedMfm }}
{{ i18n.ts.enableAnimatedMfm }}
{{ i18n.ts.showGapBetweenNotesInTimeline }}
@@ -229,6 +230,7 @@ const showClipButtonInNoteFooter = computed(defaultStore.makeGetterSetter('showC
const reactionsDisplaySize = computed(defaultStore.makeGetterSetter('reactionsDisplaySize'));
const limitWidthOfReaction = computed(defaultStore.makeGetterSetter('limitWidthOfReaction'));
const collapseRenotes = computed(defaultStore.makeGetterSetter('collapseRenotes'));
+const hideMutedNotes = computed(defaultStore.makeGetterSetter('hideMutedNotes'));
const reduceAnimation = computed(defaultStore.makeGetterSetter('animation', v => !v, v => !v));
const useBlurEffectForModal = computed(defaultStore.makeGetterSetter('useBlurEffectForModal'));
const useBlurEffect = computed(defaultStore.makeGetterSetter('useBlurEffect'));
@@ -295,6 +297,7 @@ watch([
limitWidthOfReaction,
highlightSensitiveMedia,
keepScreenOn,
+ hideMutedNotes,
disableStreamingTimeline,
], async () => {
await reloadAsk();
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index 65a3b90b1..25810dad4 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -370,6 +370,10 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'device',
default: false,
},
+ hideMutedNotes: {
+ where: 'device',
+ default: false,
+ },
tlWithReplies: {
where: 'device',
default: false,