From 2fbfe122ae0e7d59a6b1df08cccd091010bc94ec Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 23 Sep 2026 12:58:40 -0700 Subject: Moderation: the whole mute list everywhere, follows' reports fold posts, strangers' spam hidden. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mutes were only applied when the feed merged and painted. One predicate (hiddenWhy / hiddenPk) now gates the feed, thread replies, notifications, the who-reacted panel and counts, quote cards, rooms, the DM list and the DM push. The list itself is read in full — people, words, hashtags, whole threads, and the nip44 private half — and edited through one publish path (mute thread and hidden words from the ⋯ menu and a Settings → Nostr card). Reports (NIP-56) from the people you follow are read from their outbox relays every half hour; a post or author they flagged is folded behind who said so, with Show. Report… in the ⋯ menu publishes a kind 1984 and hides the post for you. Amethyst's stranger rules: a post of 60+ characters repeated under another id is a duplicate and five duplicates hide the author for the session; more than ten hashtags hides the post. Both switchable in Settings. Co-Authored-By: Claude Fable 5.1 --- src/dm-inbox.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/dm-inbox.js') diff --git a/src/dm-inbox.js b/src/dm-inbox.js index a91a8e0..b9eec3a 100644 --- a/src/dm-inbox.js +++ b/src/dm-inbox.js @@ -90,6 +90,7 @@ export async function classifyDm(wrap, inboxes) { author, mine: author === rec.pubkey, followed: (rec.follows || []).includes(author), + muted: (rec.muted || []).includes(author), // Someone you're already talking to is not a stranger, whether or not // you ever followed them. known: (rec.known || []).includes(author), @@ -110,6 +111,7 @@ export async function classifyDm(wrap, inboxes) { export function shouldNotifyDm(verdict) { if (!verdict) return true; if (verdict.mine) return false; + if (verdict.muted) return false; // muted in the app: no buzz either if (verdict.followed || verdict.known) return true; return !verdict.hasList; } -- cgit v1.2.3