summaryrefslogtreecommitdiff
path: root/src/loaders/pleroma.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/loaders/pleroma.ts')
-rw-r--r--src/loaders/pleroma.ts27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/loaders/pleroma.ts b/src/loaders/pleroma.ts
index a833248..73d11da 100644
--- a/src/loaders/pleroma.ts
+++ b/src/loaders/pleroma.ts
@@ -7,6 +7,7 @@ interface PleromaFeedConfig {
username: string;
maxPosts?: number;
accountId?: string; // Optional: if provided, skips account lookup
+ allowedTags?: string[]; // Optional: if provided, only posts with these tags are included
}
interface PleromaAccount {
@@ -150,6 +151,26 @@ function isFilteredStatus(status: PleromaStatus): boolean {
return false;
}
+function extractHashtags(htmlContent: string): string[] {
+ // Extract hashtags from HTML spans and plain text
+ const hashtagPattern = /#(\w+)/gi;
+ const matches = htmlContent.match(hashtagPattern);
+ return matches ? [...new Set(matches.map((tag) => tag.toLowerCase()))] : [];
+}
+
+function hasAllowedTag(status: PleromaStatus, allowedTags: string[]): boolean {
+ if (!allowedTags || allowedTags.length === 0) {
+ return true; // No filtering if no tags specified
+ }
+
+ const content = status.content || "";
+ const hashtags = extractHashtags(content);
+ const normalizedAllowedTags = allowedTags.map((tag) => tag.toLowerCase().replace(/^#/, ""));
+ const normalizedHashtags = hashtags.map((tag) => tag.toLowerCase().replace(/^#/, ""));
+
+ return normalizedHashtags.some((tag) => normalizedAllowedTags.includes(tag));
+}
+
function cleanContent(htmlContent: string): string {
const turndownService = new TurndownService({
headingStyle: "atx",
@@ -227,7 +248,11 @@ export function pleromaLoader(config: PleromaFeedConfig): Loader {
logger.info(`Fetched ${statuses.length} statuses from API`);
// Filter statuses
- const validStatuses = statuses.filter((status) => !isFilteredStatus(status));
+ const validStatuses = statuses.filter((status) => {
+ if (isFilteredStatus(status)) return false;
+ if (config.allowedTags && !hasAllowedTag(status, config.allowedTags)) return false;
+ return true;
+ });
logger.info(`After filtering: ${validStatuses.length} valid posts`);
// Clear existing entries