Skip to content
This repository was archived by the owner on Aug 10, 2024. It is now read-only.

Commit 4882f0e

Browse files
authored
Merge pull request #20 from jcsalterego/13-feature-denylist
render-configs.py renders denyList
2 parents cecc823 + bba6b9f commit 4882f0e

File tree

5 files changed

+48
-1
lines changed

5 files changed

+48
-1
lines changed

CONFIG.md

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ Cute animals feed
3232
- red pandas
3333
- quokkas
3434

35+
# denyList
36+
37+
> Deny list will exclude any results from a given user. You can provide the username or DID.
38+
>
39+
> - did:plc:1234
40+
> - @spamspamspam.bsky.social
41+
3542
# safeMode
3643

3744
> Safe mode limits the total number of API calls coming from Cloudflare.

cloudflare-worker/bsky-feedgen.js

+12
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,11 @@ export async function getFeedSkeleton(request, env) {
280280
console.warn(`Feed ID ${feedId} has no safeMode`);
281281
config.safeMode = true;
282282
}
283+
if (config.denyList === undefined) {
284+
config.denyList = new Set();
285+
} else {
286+
config.denyList = new Set(config.denyList);
287+
}
283288
resetFetchCount(); // for long-lived processes (local)
284289
setSafeMode(config.safeMode);
285290

@@ -343,6 +348,13 @@ export async function getFeedSkeleton(request, env) {
343348
a.timestamp === b.timestamp ? 0 : a.timestamp < b.timestamp ? -1 : 1
344349
);
345350

351+
if (config.denyList.size > 0) {
352+
items = items.filter((item) => {
353+
let did = item.atURL.split("/")[2];
354+
return !config.denyList.has(did);
355+
});
356+
}
357+
346358
items = items.slice(0, limit);
347359

348360
let feed = [];

cloudflare-worker/configs.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const CONFIGS = {
1111
"red pandas",
1212
"quokkas"
1313
],
14+
"denyList": [],
1415
"safeMode": true,
1516
"avatar": "avatar.png",
1617
"isEnabled": true

feed-generator/configs.json

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"red pandas",
1212
"quokkas"
1313
],
14+
"denyList": [],
1415
"safeMode": true,
1516
"avatar": "avatar.png",
1617
"isEnabled": true

render-configs.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
POST_REGEX = re.compile(r"^.*[\./]bsky\.app/profile/(.+?)/post/([a-z0-9]+)")
1212
PROFILE_REGEX = re.compile(r"^.*[\./]bsky\.app/profile/([^/ ]+)( .+)?$")
1313

14+
LIST_KEYS = [
15+
"searchTerms",
16+
"denyList",
17+
]
18+
1419

1520
def resolve_handles(handles):
1621
dids = {}
@@ -98,6 +103,25 @@ def render_search_terms(search_terms):
98103
return rendered_terms
99104

100105

106+
def render_dids_list(user_list):
107+
dids = set()
108+
handles = set()
109+
dids_or_users = [
110+
re.compile(LIST_ITEM_REGEX).sub("", term)
111+
for term in user_list
112+
]
113+
for did_or_user in dids_or_users:
114+
if did_or_user.startswith("did:"):
115+
dids.add(did_or_user)
116+
else:
117+
if did_or_user.startswith("@"):
118+
did_or_user = did_or_user[1:]
119+
handles.add(did_or_user)
120+
if len(handles) > 0:
121+
handle_lookup = resolve_handles(handles)
122+
dids.update(handle_lookup.values())
123+
return list(dids)
124+
101125
def parse_config(dirname, markdown_contents):
102126
config = {}
103127
sections = markdown_contents.split("\n# ")
@@ -115,7 +139,7 @@ def parse_config(dirname, markdown_contents):
115139

116140
config[section] = lines
117141

118-
flat_keys = [key for key in config.keys() if key != "searchTerms"]
142+
flat_keys = [key for key in config.keys() if key not in LIST_KEYS]
119143
for key in flat_keys:
120144
config[key] = " ".join(config[key])
121145
if "searchTerms" in config:
@@ -145,6 +169,8 @@ def parse_config(dirname, markdown_contents):
145169
else:
146170
# for legacy support, if the section is missing, set to True
147171
config["safeMode"] = True
172+
if "denyList" in config:
173+
config["denyList"] = render_dids_list(config["denyList"])
148174

149175
return config
150176

0 commit comments

Comments
 (0)