aboutsummaryrefslogtreecommitdiffstats
path: root/src/dm-inbox.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-09-23 12:58:40 -0700
committerAdam Soltys <[email protected]>2026-09-23 12:58:40 -0700
commit2fbfe122ae0e7d59a6b1df08cccd091010bc94ec (patch)
tree0e9eebdc4f89eba61ec078a3a4345f35d507ca07 /src/dm-inbox.js
parentf4c2f914e8349802feb3d4b5e10165437ef9750d (diff)
downloadcoinosv3-2fbfe122ae0e7d59a6b1df08cccd091010bc94ec.tar.gz
coinosv3-2fbfe122ae0e7d59a6b1df08cccd091010bc94ec.zip
Moderation: the whole mute list everywhere, follows' reports fold posts, strangers' spam hidden.
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 <[email protected]>
Diffstat (limited to 'src/dm-inbox.js')
-rw-r--r--src/dm-inbox.js2
1 files changed, 2 insertions, 0 deletions
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;
}