@fsvreddit/bot-bouncer-evaluation 0.7.50 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/allEvaluators.js +0 -2
- package/dist/userEvaluation/EvaluateBadDisplayname.d.ts +4 -4
- package/dist/userEvaluation/EvaluateBadDisplaynameDefinedHandles.d.ts +4 -4
- package/dist/userEvaluation/EvaluateBadUsername.d.ts +4 -4
- package/dist/userEvaluation/EvaluateBioText.d.ts +4 -4
- package/dist/userEvaluation/EvaluateBioTextDefinedHandles.d.ts +4 -4
- package/dist/userEvaluation/EvaluateBotGroupAdvanced.d.ts +5 -5
- package/dist/userEvaluation/EvaluateBotGroupAdvanced.js +12 -12
- package/dist/userEvaluation/EvaluateCommentPhrase.d.ts +4 -4
- package/dist/userEvaluation/EvaluateDomainSharer.d.ts +4 -4
- package/dist/userEvaluation/EvaluateInconsistentAgeBot.d.ts +4 -4
- package/dist/userEvaluation/EvaluateInconsistentGenderBot.d.ts +4 -4
- package/dist/userEvaluation/EvaluateLinkReuse.d.ts +4 -4
- package/dist/userEvaluation/EvaluateLinkReuse.js +6 -5
- package/dist/userEvaluation/EvaluateObfuscatedBioKeywords.d.ts +4 -4
- package/dist/userEvaluation/EvaluatePinnedPostTitle.d.ts +4 -4
- package/dist/userEvaluation/EvaluatePostTitle.d.ts +4 -4
- package/dist/userEvaluation/EvaluatePostTitleDefinedHandles.d.ts +4 -4
- package/dist/userEvaluation/EvaluatePostTitleMulti.d.ts +4 -4
- package/dist/userEvaluation/EvaluateRedgifs.d.ts +4 -4
- package/dist/userEvaluation/EvaluateRedgifs.js +3 -2
- package/dist/userEvaluation/EvaluateRepostBot.d.ts +4 -4
- package/dist/userEvaluation/EvaluateRepostBot.js +6 -5
- package/dist/userEvaluation/EvaluateSelfComment.d.ts +4 -4
- package/dist/userEvaluation/EvaluateSelfComment.js +4 -3
- package/dist/userEvaluation/EvaluateSocialLinks.d.ts +4 -4
- package/dist/userEvaluation/EvaluateSuspiciousFirstPost.d.ts +4 -4
- package/dist/userEvaluation/EvaluateTGGroup.d.ts +4 -4
- package/dist/userEvaluation/EvaluateTextInNsfwImages.d.ts +1 -1
- package/dist/userEvaluation/EvaluateTextInNsfwImages.js +4 -3
- package/dist/userEvaluation/EvaluateWarmupBot.d.ts +5 -4
- package/dist/userEvaluation/EvaluateWarmupBot.js +9 -2
- package/dist/userEvaluation/EvaluateWorldTraveller.d.ts +4 -4
- package/dist/userEvaluation/EvaluateWorldTraveller.js +2 -4
- package/dist/userEvaluation/UserEvaluatorBase.d.ts +6 -7
- package/dist/userEvaluation/UserEvaluatorBase.js +7 -7
- package/dist/userEvaluation/evaluatorHelpers.d.ts +2 -2
- package/dist/userEvaluation/evaluatorHelpers.js +6 -5
- package/dist/userEvaluation/index.d.ts +6 -5
- package/dist/userEvaluation/index.js +6 -5
- package/dist/utility.d.ts +5 -4
- package/dist/utility.js +8 -7
- package/package.json +4 -5
- package/tsconfig.build.json +14 -14
- package/tsconfig.json +1 -1
package/dist/allEvaluators.js
CHANGED
|
@@ -23,7 +23,6 @@ const EvaluateBadDisplaynameDefinedHandles_js_1 = require("./userEvaluation/Eval
|
|
|
23
23
|
const EvaluatePostTitleMulti_js_1 = require("./userEvaluation/EvaluatePostTitleMulti.js");
|
|
24
24
|
const EvaluateWarmupBot_js_1 = require("./userEvaluation/EvaluateWarmupBot.js");
|
|
25
25
|
const EvaluateBotGroupAdvancedInternal_js_1 = require("./userEvaluation/EvaluateBotGroupAdvancedInternal.js");
|
|
26
|
-
const EvaluateTitleCopyBot_js_1 = require("./userEvaluation/EvaluateTitleCopyBot.js");
|
|
27
26
|
const EvaluateTextInNsfwImages_js_1 = require("./userEvaluation/EvaluateTextInNsfwImages.js");
|
|
28
27
|
const EvaluateRepostBot_js_1 = require("./userEvaluation/EvaluateRepostBot.js");
|
|
29
28
|
const EvaluateLinkReuse_js_1 = require("./userEvaluation/EvaluateLinkReuse.js");
|
|
@@ -62,7 +61,6 @@ exports.ALL_EVALUATORS = [
|
|
|
62
61
|
EvaluateWarmupBot_js_1.EvaluateWarmupBot,
|
|
63
62
|
EvaluateSocialLinks_js_1.EvaluateSocialLinks,
|
|
64
63
|
EvaluateBotGroupAdvanced_js_1.EvaluateBotGroupAdvanced,
|
|
65
|
-
EvaluateTitleCopyBot_js_1.EvaluateTitleCopyBot,
|
|
66
64
|
EvaluateLinkReuse_js_1.EvaluateLinkReuse,
|
|
67
65
|
EvaluateTextInNsfwImages_js_1.EvaluateTextInNsfwImages,
|
|
68
66
|
EvaluateRepostBot_js_1.EvaluateRepostBot,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateBadDisplayName extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -11,7 +11,7 @@ export declare class EvaluateBadDisplayName extends UserEvaluatorBase {
|
|
|
11
11
|
private isBadDisplayName;
|
|
12
12
|
gatherRegexes(): EvaluatorRegex[];
|
|
13
13
|
validateVariables(): ValidationIssue[];
|
|
14
|
-
preEvaluateComment(_:
|
|
14
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
15
15
|
preEvaluatePost(_: Post): boolean;
|
|
16
16
|
preEvaluateUser(user: UserExtended): boolean;
|
|
17
17
|
evaluate(_user: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateBadDisplayNameDefinedHandles extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -12,7 +12,7 @@ export declare class EvaluateBadDisplayNameDefinedHandles extends UserEvaluatorB
|
|
|
12
12
|
private compiledRegexes;
|
|
13
13
|
private getCompiledRegexes;
|
|
14
14
|
validateVariables(): ValidationIssue[];
|
|
15
|
-
preEvaluateComment(_:
|
|
15
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
16
16
|
preEvaluatePost(_: Post): boolean;
|
|
17
17
|
preEvaluateUser(user: UserExtended): boolean;
|
|
18
18
|
evaluate(_user: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateBadUsername extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -11,7 +11,7 @@ export declare class EvaluateBadUsername extends UserEvaluatorBase {
|
|
|
11
11
|
gatherRegexes(): EvaluatorRegex[];
|
|
12
12
|
private compiledRegexes;
|
|
13
13
|
private getCompiledRegexes;
|
|
14
|
-
preEvaluateComment(event:
|
|
14
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
15
15
|
preEvaluatePost(post: Post): boolean;
|
|
16
16
|
preEvaluateUser(user: UserExtended): boolean;
|
|
17
17
|
evaluate(_user: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateBioText extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -13,7 +13,7 @@ export declare class EvaluateBioText extends UserEvaluatorBase {
|
|
|
13
13
|
gatherRegexes(): EvaluatorRegex[];
|
|
14
14
|
private compiledRegexes;
|
|
15
15
|
private getCompiledRegexes;
|
|
16
|
-
preEvaluateComment(event:
|
|
16
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
17
17
|
preEvaluatePost(_: Post): boolean;
|
|
18
18
|
preEvaluateUser(user: UserExtended): boolean;
|
|
19
19
|
evaluate(user: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateBioTextDefinedHandles extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -9,7 +9,7 @@ export declare class EvaluateBioTextDefinedHandles extends UserEvaluatorBase {
|
|
|
9
9
|
private getHandles;
|
|
10
10
|
private compiledRegexes;
|
|
11
11
|
private getCompiledRegexes;
|
|
12
|
-
preEvaluateComment(event:
|
|
12
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
13
13
|
validateVariables(): ValidationIssue[];
|
|
14
14
|
gatherRegexes(): EvaluatorRegex[];
|
|
15
15
|
preEvaluatePost(_: Post): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Comment, Post,
|
|
2
|
-
import {
|
|
1
|
+
import { Comment, Post, UserSocialLink } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
interface AgeRange {
|
|
6
6
|
dateFrom: string;
|
|
7
7
|
dateTo?: string;
|
|
@@ -88,7 +88,7 @@ export declare class EvaluateBotGroupAdvanced extends UserEvaluatorBase {
|
|
|
88
88
|
private redis;
|
|
89
89
|
allowNewFeatures: boolean;
|
|
90
90
|
private evaluationError;
|
|
91
|
-
constructor(
|
|
91
|
+
constructor(history: (Post | Comment)[], socialLinks: UserSocialLink[] | undefined, variables: Record<string, unknown>);
|
|
92
92
|
private compiledRegexes;
|
|
93
93
|
private getCompiledRegex;
|
|
94
94
|
private anyRegexMatches;
|
|
@@ -104,7 +104,7 @@ export declare class EvaluateBotGroupAdvanced extends UserEvaluatorBase {
|
|
|
104
104
|
private postOrCommentMatchesCondition;
|
|
105
105
|
collectCommentConditionsForPreEvalation(criteria: CriteriaGroup): CommentCondition[];
|
|
106
106
|
collectNegatedCommentConditionsForPreEvaluation(criteria: CriteriaGroup): CommentCondition[];
|
|
107
|
-
preEvaluateComment(comment:
|
|
107
|
+
preEvaluateComment(comment: OnCommentCreateRequest): Promise<boolean>;
|
|
108
108
|
private postMatchesCondition;
|
|
109
109
|
private cachedPostProperties;
|
|
110
110
|
private postPropertiesStatistics;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvaluateBotGroupAdvanced = void 0;
|
|
4
|
-
const
|
|
4
|
+
const server_1 = require("@devvit/web/server");
|
|
5
|
+
const shared_1 = require("@devvit/web/shared");
|
|
5
6
|
const UserEvaluatorBase_js_1 = require("./UserEvaluatorBase.js");
|
|
6
7
|
const date_fns_1 = require("date-fns");
|
|
7
8
|
const evaluatorHelpers_js_1 = require("./evaluatorHelpers.js");
|
|
@@ -452,8 +453,8 @@ function validateBotGroup(group, allowNewFeatures, evaluatorName) {
|
|
|
452
453
|
return errors;
|
|
453
454
|
}
|
|
454
455
|
class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
455
|
-
constructor(
|
|
456
|
-
super(
|
|
456
|
+
constructor(history, socialLinks, variables) {
|
|
457
|
+
super(history, socialLinks, variables);
|
|
457
458
|
this.name = "Bot Group Advanced";
|
|
458
459
|
this.shortname = "botgroupadvanced";
|
|
459
460
|
this.banContentThreshold = 0; // No content ban threshold for this evaluator to support account properties only checks
|
|
@@ -467,7 +468,7 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
467
468
|
cacheMisses: 0,
|
|
468
469
|
errors: 0,
|
|
469
470
|
};
|
|
470
|
-
this.redis = context.appSlug === constants_js_1.MAIN_APP_NAME ?
|
|
471
|
+
this.redis = server_1.context.appSlug === constants_js_1.MAIN_APP_NAME ? server_1.redis.global : server_1.redis;
|
|
471
472
|
}
|
|
472
473
|
getCompiledRegex(regex) {
|
|
473
474
|
const result = this.compiledRegexes.get(regex);
|
|
@@ -616,9 +617,9 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
616
617
|
return true;
|
|
617
618
|
}
|
|
618
619
|
anySubredditMatches(item, subredditNames) {
|
|
619
|
-
const subredditName = "subredditName" in item ? item.subredditName :
|
|
620
|
+
const subredditName = "subredditName" in item ? item.subredditName : server_1.context.subredditName;
|
|
620
621
|
const authorName = "authorName" in item ? item.authorName : undefined;
|
|
621
|
-
return subredditNames.some(subreddit => subredditName
|
|
622
|
+
return subredditNames.some(subreddit => subredditName.toLowerCase() === subreddit.toLowerCase())
|
|
622
623
|
|| subredditNames.some(subreddit => subreddit === "$profile" && subredditName === `u_${authorName}`);
|
|
623
624
|
}
|
|
624
625
|
postOrCommentMatchesCondition(item, condition) {
|
|
@@ -786,7 +787,7 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
786
787
|
continue;
|
|
787
788
|
}
|
|
788
789
|
if (group.age || group.displayNameRegex || group.nsfw || group.hasRedditPremium || group.hasVerifiedEmail || group.isSubredditModerator) {
|
|
789
|
-
userInfo ?? (userInfo = await (0, utility_js_1.getAdditionalUserInfo)(comment.author.name
|
|
790
|
+
userInfo ?? (userInfo = await (0, utility_js_1.getAdditionalUserInfo)(comment.author.name));
|
|
790
791
|
if (!userInfo) {
|
|
791
792
|
continue;
|
|
792
793
|
}
|
|
@@ -890,7 +891,7 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
890
891
|
return this.cachedPostProperties[postId];
|
|
891
892
|
}
|
|
892
893
|
try {
|
|
893
|
-
const postProperties = await
|
|
894
|
+
const postProperties = await server_1.reddit.getPostById(postId).then(post => ({
|
|
894
895
|
authorName: post.authorName,
|
|
895
896
|
title: post.title,
|
|
896
897
|
body: post.body,
|
|
@@ -920,7 +921,7 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
920
921
|
if (condition.postId && !condition.postId.some(postId => comment.postId === `t3_${postId}`)) {
|
|
921
922
|
return { matched: false };
|
|
922
923
|
}
|
|
923
|
-
if (condition.isTopLevel !== undefined && condition.isTopLevel !== (0,
|
|
924
|
+
if (condition.isTopLevel !== undefined && condition.isTopLevel !== (0, shared_1.isT3)(comment.parentId)) {
|
|
924
925
|
return { matched: false };
|
|
925
926
|
}
|
|
926
927
|
if (condition.isCommentOnOwnPost !== undefined) {
|
|
@@ -1048,7 +1049,7 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
1048
1049
|
}
|
|
1049
1050
|
;
|
|
1050
1051
|
if (group.age || group.minCommentKarma || group.maxCommentKarma || group.minLinkKarma || group.maxLinkKarma || group.displayNameRegex || group.nsfw || group.hasRedditPremium || group.hasVerifiedEmail || group.isSubredditModerator) {
|
|
1051
|
-
userInfo ?? (userInfo = await (0, utility_js_1.getAdditionalUserInfo)(post.authorName
|
|
1052
|
+
userInfo ?? (userInfo = await (0, utility_js_1.getAdditionalUserInfo)(post.authorName));
|
|
1052
1053
|
if (!userInfo) {
|
|
1053
1054
|
continue;
|
|
1054
1055
|
}
|
|
@@ -1268,7 +1269,6 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
1268
1269
|
}
|
|
1269
1270
|
else { // comments
|
|
1270
1271
|
const comments = this.getComments();
|
|
1271
|
-
const currentSubreddit = this.context.subredditName ?? await this.context.reddit.getCurrentSubredditName();
|
|
1272
1272
|
for (const comment of comments) {
|
|
1273
1273
|
if (subredditsMatched.size >= distinctSubredditsNeeded && matches.length >= maxMatchesNeeded) {
|
|
1274
1274
|
break;
|
|
@@ -1279,7 +1279,7 @@ class EvaluateBotGroupAdvanced extends UserEvaluatorBase_js_1.UserEvaluatorBase
|
|
|
1279
1279
|
const matchResult = await this.commentMatchesCondition(comment, criteria, this.history);
|
|
1280
1280
|
if (matchResult.matched) {
|
|
1281
1281
|
matches.push(matchResult);
|
|
1282
|
-
const subredditName = "subredditName" in comment ? comment.subredditName :
|
|
1282
|
+
const subredditName = "subredditName" in comment ? comment.subredditName : server_1.context.subredditName;
|
|
1283
1283
|
subredditsMatched.add(subredditName);
|
|
1284
1284
|
}
|
|
1285
1285
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateCommentPhrase extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -11,7 +11,7 @@ export declare class EvaluateCommentPhrase extends UserEvaluatorBase {
|
|
|
11
11
|
private compiledRegexes;
|
|
12
12
|
private getCompiledRegexes;
|
|
13
13
|
private eligibleComment;
|
|
14
|
-
preEvaluateComment(event:
|
|
14
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
15
15
|
preEvaluatePost(_: Post): boolean;
|
|
16
16
|
preEvaluateUser(user: UserExtended): boolean;
|
|
17
17
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateDomainSharer extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -11,7 +11,7 @@ export declare class EvaluateDomainSharer extends UserEvaluatorBase {
|
|
|
11
11
|
private ignoredSubreddits;
|
|
12
12
|
private ignoredSubredditRegexes;
|
|
13
13
|
private domainsFromPost;
|
|
14
|
-
preEvaluateComment(event:
|
|
14
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
15
15
|
preEvaluatePost(post: Post): boolean;
|
|
16
16
|
preEvaluateUser(user: UserExtended): boolean;
|
|
17
17
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
2
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
3
|
-
import {
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateInconsistentAgeBot extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -9,7 +9,7 @@ export declare class EvaluateInconsistentAgeBot extends UserEvaluatorBase {
|
|
|
9
9
|
canAutoBan: boolean;
|
|
10
10
|
gatherRegexes(): EvaluatorRegex[];
|
|
11
11
|
validateVariables(): ValidationIssue[];
|
|
12
|
-
preEvaluateComment(_event:
|
|
12
|
+
preEvaluateComment(_event: OnCommentCreateRequest): boolean;
|
|
13
13
|
private getAgeFromPostTitle;
|
|
14
14
|
preEvaluatePost(post: Post): boolean;
|
|
15
15
|
preEvaluateUser(user: UserExtended): boolean;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
2
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
3
|
-
import {
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateInconsistentGenderBot extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
banContentThreshold: number;
|
|
9
9
|
canAutoBan: boolean;
|
|
10
|
-
preEvaluateComment(_event:
|
|
10
|
+
preEvaluateComment(_event: OnCommentCreateRequest): boolean;
|
|
11
11
|
getGenderFromTitle(title: string): string | undefined;
|
|
12
12
|
gatherRegexes(): EvaluatorRegex[];
|
|
13
13
|
validateVariables(): ValidationIssue[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateLinkReuse extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -9,7 +9,7 @@ export declare class EvaluateLinkReuse extends UserEvaluatorBase {
|
|
|
9
9
|
private getLinkRegexes;
|
|
10
10
|
validateVariables(): ValidationIssue[];
|
|
11
11
|
preEvaluatePost(post: Post): boolean;
|
|
12
|
-
preEvaluateComment(_event:
|
|
12
|
+
preEvaluateComment(_event: OnCommentCreateRequest): Promise<boolean>;
|
|
13
13
|
preEvaluateUser(user: UserExtended): boolean;
|
|
14
14
|
private getDistinctUsersForLink;
|
|
15
15
|
private isEligibleUserForEvaluator;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvaluateLinkReuse = void 0;
|
|
4
|
+
const server_1 = require("@devvit/web/server");
|
|
4
5
|
const UserEvaluatorBase_js_1 = require("./UserEvaluatorBase.js");
|
|
5
6
|
const constants_js_1 = require("../constants.js");
|
|
6
7
|
const date_fns_1 = require("date-fns");
|
|
@@ -62,19 +63,19 @@ class EvaluateLinkReuse extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
62
63
|
return user.nsfw;
|
|
63
64
|
}
|
|
64
65
|
async getDistinctUsersForLink(link) {
|
|
65
|
-
const
|
|
66
|
+
const redisClient = server_1.context.appSlug === constants_js_1.MAIN_APP_NAME ? server_1.redis.global : server_1.redis;
|
|
66
67
|
const cacheKey = `bbe:linkreuse:distinctUsers:${link}`;
|
|
67
|
-
const cachedResults = await
|
|
68
|
+
const cachedResults = await redisClient.get(cacheKey);
|
|
68
69
|
if (cachedResults !== undefined) {
|
|
69
70
|
return JSON.parse(cachedResults);
|
|
70
71
|
}
|
|
71
|
-
const results = await
|
|
72
|
+
const results = await server_1.reddit.searchPosts({
|
|
72
73
|
query: `url:"${link}"`,
|
|
73
74
|
sort: "new",
|
|
74
75
|
limit: 100,
|
|
75
76
|
}).all();
|
|
76
77
|
const distinctUsers = Array.from(new Set(results.filter(post => post.url === link && post.authorName !== "[deleted]").map(post => post.authorName)));
|
|
77
|
-
await
|
|
78
|
+
await redisClient.set(cacheKey, JSON.stringify(distinctUsers), { expiration: (0, date_fns_1.addHours)(new Date(), 1) });
|
|
78
79
|
return distinctUsers;
|
|
79
80
|
}
|
|
80
81
|
async isEligibleUserForEvaluator(username, isSubject = false) {
|
|
@@ -83,7 +84,7 @@ class EvaluateLinkReuse extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
83
84
|
socialLinks = await this.getSocialLinks(username);
|
|
84
85
|
}
|
|
85
86
|
else {
|
|
86
|
-
socialLinks = await (0, index_js_1.getSocialLinksWithCache)(username
|
|
87
|
+
socialLinks = await (0, index_js_1.getSocialLinksWithCache)(username);
|
|
87
88
|
}
|
|
88
89
|
if (socialLinks.length === 0) {
|
|
89
90
|
return false;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { UserEvaluatorBase } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateObfuscatedBioKeywords extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -9,7 +9,7 @@ export declare class EvaluateObfuscatedBioKeywords extends UserEvaluatorBase {
|
|
|
9
9
|
private getKeywords;
|
|
10
10
|
private getAllowedTerms;
|
|
11
11
|
private bioTextMatches;
|
|
12
|
-
preEvaluateComment(event:
|
|
12
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
13
13
|
preEvaluatePost(_: Post): boolean;
|
|
14
14
|
preEvaluateUser(user: UserExtended): boolean;
|
|
15
15
|
evaluate(_user: UserExtended): boolean;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluatePinnedPostTitles extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
banContentThreshold: number;
|
|
9
9
|
validateVariables(): ValidationIssue[];
|
|
10
10
|
gatherRegexes(): EvaluatorRegex[];
|
|
11
|
-
preEvaluateComment(_:
|
|
11
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
12
12
|
preEvaluatePost(post: Post): boolean;
|
|
13
13
|
preEvaluateUser(user: UserExtended): boolean;
|
|
14
14
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluatePostTitle extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
banContentThreshold: number;
|
|
9
9
|
validateVariables(): ValidationIssue[];
|
|
10
10
|
gatherRegexes(): EvaluatorRegex[];
|
|
11
|
-
preEvaluateComment(_:
|
|
11
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
12
12
|
private getTitles;
|
|
13
13
|
private titleRegexes;
|
|
14
14
|
private getTitleRegexes;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluatePostTitleDefinedHandles extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -11,7 +11,7 @@ export declare class EvaluatePostTitleDefinedHandles extends UserEvaluatorBase {
|
|
|
11
11
|
gatherRegexes(): EvaluatorRegex[];
|
|
12
12
|
private compiledRegexes;
|
|
13
13
|
private getCompiledRegexes;
|
|
14
|
-
preEvaluateComment(_:
|
|
14
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
15
15
|
preEvaluatePost(post: Post): boolean;
|
|
16
16
|
preEvaluateUser(user: UserExtended): boolean;
|
|
17
17
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluatePostTitleMulti extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -11,7 +11,7 @@ export declare class EvaluatePostTitleMulti extends UserEvaluatorBase {
|
|
|
11
11
|
gatherRegexes(): EvaluatorRegex[];
|
|
12
12
|
private compiledRegexes;
|
|
13
13
|
private getCompiledRegexes;
|
|
14
|
-
preEvaluateComment(_:
|
|
14
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
15
15
|
preEvaluatePost(post: Post): boolean;
|
|
16
16
|
preEvaluateUser(user: UserExtended): boolean;
|
|
17
17
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
2
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase";
|
|
3
|
-
import {
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateRedgifs extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
evaluatorDisabled(): boolean;
|
|
9
9
|
gatherRegexes(): EvaluatorRegex[];
|
|
10
10
|
validateVariables(): ValidationIssue[];
|
|
11
|
-
preEvaluateComment(_:
|
|
11
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean | Promise<boolean>;
|
|
12
12
|
preEvaluatePost(post: Post): boolean;
|
|
13
13
|
preEvaluateUser(user: UserExtended): boolean;
|
|
14
14
|
private getRedis;
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.EvaluateRedgifs = void 0;
|
|
7
|
+
const server_1 = require("@devvit/web/server");
|
|
7
8
|
const UserEvaluatorBase_1 = require("./UserEvaluatorBase");
|
|
8
9
|
const evaluatorHelpers_1 = require("./evaluatorHelpers");
|
|
9
10
|
const date_fns_1 = require("date-fns");
|
|
@@ -22,7 +23,7 @@ class EvaluateRedgifs extends UserEvaluatorBase_1.UserEvaluatorBase {
|
|
|
22
23
|
const mainAppOnly = this.getVariable("mainAppOnly", false);
|
|
23
24
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
24
25
|
if (mainAppOnly) {
|
|
25
|
-
return
|
|
26
|
+
return server_1.context.appSlug === constants_1.MAIN_APP_NAME;
|
|
26
27
|
}
|
|
27
28
|
return false;
|
|
28
29
|
}
|
|
@@ -62,7 +63,7 @@ class EvaluateRedgifs extends UserEvaluatorBase_1.UserEvaluatorBase {
|
|
|
62
63
|
return user.createdAt < (0, date_fns_1.subDays)(new Date(), minAgeInDays);
|
|
63
64
|
}
|
|
64
65
|
getRedis() {
|
|
65
|
-
return
|
|
66
|
+
return server_1.context.appSlug === constants_1.MAIN_APP_NAME ? server_1.redis.global : server_1.redis;
|
|
66
67
|
}
|
|
67
68
|
async getRedgifsBearerToken() {
|
|
68
69
|
const cacheKey = "bbe:redgifs:bearerToken";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { UserEvaluatorBase } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateRepostBot extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -10,7 +10,7 @@ export declare class EvaluateRepostBot extends UserEvaluatorBase {
|
|
|
10
10
|
private minWordsInTitle;
|
|
11
11
|
private isEligiblePost;
|
|
12
12
|
preEvaluatePost(post: Post): boolean;
|
|
13
|
-
preEvaluateComment(_:
|
|
13
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
14
14
|
preEvaluateUser(user: UserExtended): boolean;
|
|
15
15
|
private getImageUrl;
|
|
16
16
|
private postIdToUrl;
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.EvaluateRepostBot = void 0;
|
|
7
|
+
const server_1 = require("@devvit/web/server");
|
|
7
8
|
const UserEvaluatorBase_js_1 = require("./UserEvaluatorBase.js");
|
|
8
9
|
const evaluatorHelpers_js_1 = require("./evaluatorHelpers.js");
|
|
9
10
|
const date_fns_1 = require("date-fns");
|
|
@@ -53,8 +54,8 @@ class EvaluateRepostBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
53
54
|
}
|
|
54
55
|
async getPostSimilarity(postA, postB) {
|
|
55
56
|
const cacheKey = `bbe:RepostBot:similarity:${postA.id}:${postB.id}`;
|
|
56
|
-
const
|
|
57
|
-
const cachedResult = await
|
|
57
|
+
const redisClient = server_1.context.appSlug === constants_js_1.MAIN_APP_NAME ? server_1.redis.global : server_1.redis;
|
|
58
|
+
const cachedResult = await redisClient.get(cacheKey);
|
|
58
59
|
if (cachedResult) {
|
|
59
60
|
console.log(`Repost Checks: Using cached similarity between ${this.postIdToUrl(postA.id)} and ${this.postIdToUrl(postB.id)}: ${cachedResult}`);
|
|
60
61
|
return parseFloat(cachedResult);
|
|
@@ -96,7 +97,7 @@ class EvaluateRepostBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
96
97
|
},
|
|
97
98
|
});
|
|
98
99
|
const result = JSON.parse(response.output_text);
|
|
99
|
-
await
|
|
100
|
+
await redisClient.set(cacheKey, result.similarity.toString(), { expiration: (0, date_fns_1.addWeeks)(new Date(), 1) });
|
|
100
101
|
console.log(`Repost Checks: Tokens used: ${response.usage?.total_tokens}, Similarity between ${this.postIdToUrl(postA.id)} and ${this.postIdToUrl(postB.id)}: ${result.similarity}`);
|
|
101
102
|
return result.similarity;
|
|
102
103
|
}
|
|
@@ -130,7 +131,7 @@ class EvaluateRepostBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
130
131
|
const sortedPosts = posts.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
131
132
|
const latestPost = sortedPosts[0];
|
|
132
133
|
// Look for duplicate posts.
|
|
133
|
-
let postDuplicates = await
|
|
134
|
+
let postDuplicates = await server_1.reddit.searchPosts({
|
|
134
135
|
query: `title:"${latestPost.title}"`,
|
|
135
136
|
subredditName: latestPost.subredditName,
|
|
136
137
|
sort: "new",
|
|
@@ -139,7 +140,7 @@ class EvaluateRepostBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
139
140
|
if (postDuplicates.length === 0) {
|
|
140
141
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
141
142
|
if (this.getVariable("allowSimilarTitles", false)) {
|
|
142
|
-
postDuplicates = await
|
|
143
|
+
postDuplicates = await server_1.reddit.searchPosts({
|
|
143
144
|
query: (0, commonWords_js_1.getLeastCommonWordsFromText)(latestPost.title, { take: 3 }).join(" "),
|
|
144
145
|
subredditName: latestPost.subredditName,
|
|
145
146
|
sort: "hot",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
2
3
|
import { UserEvaluatorBase } from "./UserEvaluatorBase.js";
|
|
3
|
-
import {
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateSelfComment extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -9,7 +9,7 @@ export declare class EvaluateSelfComment extends UserEvaluatorBase {
|
|
|
9
9
|
private isSubIgnored;
|
|
10
10
|
private eligibleComment;
|
|
11
11
|
private eligiblePost;
|
|
12
|
-
preEvaluateComment(event:
|
|
12
|
+
preEvaluateComment(event: OnCommentCreateRequest): boolean;
|
|
13
13
|
preEvaluatePost(post: Post): boolean;
|
|
14
14
|
preEvaluateUser(user: UserExtended): boolean;
|
|
15
15
|
evaluate(user: UserExtended): boolean;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvaluateSelfComment = void 0;
|
|
4
|
+
const server_1 = require("@devvit/web/server");
|
|
5
|
+
const shared_1 = require("@devvit/web/shared");
|
|
4
6
|
const UserEvaluatorBase_js_1 = require("./UserEvaluatorBase.js");
|
|
5
7
|
const date_fns_1 = require("date-fns");
|
|
6
|
-
const tid_js_1 = require("@devvit/public-api/types/tid.js");
|
|
7
8
|
const evaluatorHelpers_js_1 = require("./evaluatorHelpers.js");
|
|
8
9
|
class EvaluateSelfComment extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
9
10
|
constructor() {
|
|
@@ -14,10 +15,10 @@ class EvaluateSelfComment extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
14
15
|
}
|
|
15
16
|
isSubIgnored() {
|
|
16
17
|
const ignoredSubreddits = this.getVariable("ignoredsubs", []);
|
|
17
|
-
return
|
|
18
|
+
return server_1.context.subredditName && ignoredSubreddits.includes(server_1.context.subredditName);
|
|
18
19
|
}
|
|
19
20
|
eligibleComment(comment) {
|
|
20
|
-
return (0,
|
|
21
|
+
return (0, shared_1.isT3)(comment.parentId)
|
|
21
22
|
&& comment.body.split("\n\n").length <= 2;
|
|
22
23
|
}
|
|
23
24
|
eligiblePost(post) {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateSocialLinks extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
banContentThreshold: number;
|
|
9
9
|
validateVariables(): ValidationIssue[];
|
|
10
10
|
getVariableOverrides(): Record<string, unknown>;
|
|
11
|
-
preEvaluateComment(_:
|
|
11
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
12
12
|
preEvaluatePost(post: Post): boolean;
|
|
13
13
|
preEvaluateUser(user: UserExtended): boolean;
|
|
14
14
|
evaluate(user: UserExtended): Promise<boolean>;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
2
3
|
import { UserEvaluatorBase } from "./UserEvaluatorBase.js";
|
|
3
|
-
import {
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateSuspiciousFirstPost extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
banContentThreshold: number;
|
|
9
9
|
private subList;
|
|
10
10
|
private eligiblePost;
|
|
11
|
-
preEvaluateComment(_:
|
|
11
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
12
12
|
preEvaluatePost(post: Post): boolean;
|
|
13
13
|
preEvaluateUser(user: UserExtended): boolean;
|
|
14
14
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateTGGroup extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -9,7 +9,7 @@ export declare class EvaluateTGGroup extends UserEvaluatorBase {
|
|
|
9
9
|
validateVariables(): ValidationIssue[];
|
|
10
10
|
gatherRegexes(): EvaluatorRegex[];
|
|
11
11
|
private eligiblePost;
|
|
12
|
-
preEvaluateComment(_:
|
|
12
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
13
13
|
preEvaluatePost(post: Post): boolean;
|
|
14
14
|
preEvaluateUser(user: UserExtended): boolean;
|
|
15
15
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EvaluatorRegex, ValidationIssue } from "./UserEvaluatorBase";
|
|
2
2
|
import { EvaluateBotGroupAdvanced } from "./EvaluateBotGroupAdvanced";
|
|
3
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
3
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
4
4
|
export declare class EvaluateTextInNsfwImages extends EvaluateBotGroupAdvanced {
|
|
5
5
|
name: string;
|
|
6
6
|
shortname: string;
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.EvaluateTextInNsfwImages = void 0;
|
|
7
|
+
const server_1 = require("@devvit/web/server");
|
|
7
8
|
const EvaluateBotGroupAdvanced_1 = require("./EvaluateBotGroupAdvanced");
|
|
8
9
|
const date_fns_1 = require("date-fns");
|
|
9
10
|
const evaluatorHelpers_1 = require("./evaluatorHelpers");
|
|
@@ -74,8 +75,8 @@ class EvaluateTextInNsfwImages extends EvaluateBotGroupAdvanced_1.EvaluateBotGro
|
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
76
77
|
const resultCacheKey = `bbe:imageText:${url}`;
|
|
77
|
-
const
|
|
78
|
-
const cachedResult = await
|
|
78
|
+
const redisClient = server_1.context.subredditName === constants_1.MAIN_APP_NAME ? server_1.redis.global : server_1.redis;
|
|
79
|
+
const cachedResult = await redisClient.get(resultCacheKey);
|
|
79
80
|
if (cachedResult) {
|
|
80
81
|
console.log(`OpenAI Checks: Using cached result for image ${url}, Extracted Text: ${cachedResult}`);
|
|
81
82
|
return JSON.parse(cachedResult);
|
|
@@ -122,7 +123,7 @@ class EvaluateTextInNsfwImages extends EvaluateBotGroupAdvanced_1.EvaluateBotGro
|
|
|
122
123
|
}
|
|
123
124
|
const result = JSON.parse(response.output_text);
|
|
124
125
|
console.log(`OpenAI Checks: Tokens used: ${response.usage?.total_tokens}, Model: ${model}, Image URL: ${url}, Extracted Text: ${result.extractedText}`);
|
|
125
|
-
await
|
|
126
|
+
await redisClient.set(resultCacheKey, JSON.stringify(result.extractedText), { expiration: (0, date_fns_1.addWeeks)(new Date(), 1) });
|
|
126
127
|
if (!result.extractedText) {
|
|
127
128
|
return;
|
|
128
129
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { EvaluatorRegex, UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateWarmupBot extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
8
8
|
banContentThreshold: number;
|
|
9
|
-
preEvaluateComment(_:
|
|
9
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
10
10
|
validateVariables(): ValidationIssue[];
|
|
11
11
|
gatherRegexes(): EvaluatorRegex[];
|
|
12
12
|
preEvaluatePost(post: Post): boolean;
|
|
13
13
|
preEvaluateUser(user: UserExtended): boolean;
|
|
14
|
+
private isModerator;
|
|
14
15
|
evaluate(user: UserExtended): Promise<boolean>;
|
|
15
16
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvaluateWarmupBot = void 0;
|
|
4
|
+
const server_1 = require("@devvit/web/server");
|
|
4
5
|
const UserEvaluatorBase_js_1 = require("./UserEvaluatorBase.js");
|
|
5
6
|
const lodash_1 = require("lodash");
|
|
6
|
-
const devvit_helpers_1 = require("devvit-helpers");
|
|
7
7
|
class EvaluateWarmupBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
8
8
|
constructor() {
|
|
9
9
|
super(...arguments);
|
|
@@ -51,6 +51,13 @@ class EvaluateWarmupBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
51
51
|
preEvaluateUser(user) {
|
|
52
52
|
return user.isModerator;
|
|
53
53
|
}
|
|
54
|
+
async isModerator(subredditName, username) {
|
|
55
|
+
const modList = await server_1.reddit.getModerators({
|
|
56
|
+
subredditName,
|
|
57
|
+
username,
|
|
58
|
+
}).all();
|
|
59
|
+
return modList.length > 0;
|
|
60
|
+
}
|
|
54
61
|
async evaluate(user) {
|
|
55
62
|
const subredditRegexes = this.getVariable("subredditRegexes", []);
|
|
56
63
|
if (subredditRegexes.length === 0) {
|
|
@@ -74,7 +81,7 @@ class EvaluateWarmupBot extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
74
81
|
// Check to see if the user is a mod of any of the matched subreddits
|
|
75
82
|
let moddedSubreddit;
|
|
76
83
|
for (const subreddit of matchedSubreddits) {
|
|
77
|
-
if (await
|
|
84
|
+
if (await this.isModerator(subreddit, user.username)) {
|
|
78
85
|
moddedSubreddit = subreddit;
|
|
79
86
|
break;
|
|
80
87
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Post } from "@devvit/
|
|
2
|
-
import {
|
|
1
|
+
import { Post } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
3
|
import { UserEvaluatorBase, ValidationIssue } from "./UserEvaluatorBase.js";
|
|
4
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
4
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
5
5
|
export declare class EvaluateWorldTraveller extends UserEvaluatorBase {
|
|
6
6
|
name: string;
|
|
7
7
|
shortname: string;
|
|
@@ -13,7 +13,7 @@ export declare class EvaluateWorldTraveller extends UserEvaluatorBase {
|
|
|
13
13
|
private subList;
|
|
14
14
|
private getSubList;
|
|
15
15
|
private isInEligibleSubreddit;
|
|
16
|
-
preEvaluateComment(_:
|
|
16
|
+
preEvaluateComment(_: OnCommentCreateRequest): boolean;
|
|
17
17
|
preEvaluatePost(post: Post): boolean;
|
|
18
18
|
preEvaluateUser(user: UserExtended): boolean;
|
|
19
19
|
evaluate(_: UserExtended): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvaluateWorldTraveller = void 0;
|
|
4
|
+
const server_1 = require("@devvit/web/server");
|
|
4
5
|
const UserEvaluatorBase_js_1 = require("./UserEvaluatorBase.js");
|
|
5
6
|
const constants_js_1 = require("../constants.js");
|
|
6
7
|
const lodash_1 = require("lodash");
|
|
@@ -45,10 +46,7 @@ class EvaluateWorldTraveller extends UserEvaluatorBase_js_1.UserEvaluatorBase {
|
|
|
45
46
|
return this.subList;
|
|
46
47
|
}
|
|
47
48
|
isInEligibleSubreddit() {
|
|
48
|
-
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
return this.context.subredditName.startsWith(constants_js_1.CONTROL_SUBREDDIT) || this.getSubList().has(this.context.subredditName);
|
|
49
|
+
return server_1.context.subredditName.startsWith(constants_js_1.CONTROL_SUBREDDIT) || this.getSubList().has(server_1.context.subredditName);
|
|
52
50
|
}
|
|
53
51
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
54
52
|
preEvaluateComment(_) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { UserExtended } from "@fsvreddit/fsv-devvit-helpers";
|
|
1
|
+
import { Comment, Post, UserSocialLink } from "@devvit/web/server";
|
|
2
|
+
import { OnCommentCreateRequest } from "@devvit/web/shared";
|
|
3
|
+
import { UserExtended } from "@fsvreddit/fsv-devvit-web-helpers";
|
|
4
4
|
interface HistoryOptions {
|
|
5
5
|
since?: Date;
|
|
6
6
|
omitRemoved?: boolean;
|
|
@@ -25,7 +25,6 @@ export interface HitReasonDetailed {
|
|
|
25
25
|
}
|
|
26
26
|
export type HitReason = string | HitReasonDetailed;
|
|
27
27
|
export declare abstract class UserEvaluatorBase {
|
|
28
|
-
protected context: TriggerContext;
|
|
29
28
|
private variables;
|
|
30
29
|
abstract name: string;
|
|
31
30
|
abstract shortname: string;
|
|
@@ -40,7 +39,7 @@ export declare abstract class UserEvaluatorBase {
|
|
|
40
39
|
protected ignoredSubs: Set<string>;
|
|
41
40
|
protected verboseLogging: boolean;
|
|
42
41
|
protected regexWarnThreshold: number;
|
|
43
|
-
constructor(
|
|
42
|
+
constructor(history: (Post | Comment)[], socialLinks: UserSocialLink[] | undefined, variables: Record<string, unknown>);
|
|
44
43
|
setHistory(history: (Post | Comment)[]): void;
|
|
45
44
|
setSocialLinks(socialLinks: UserSocialLink[]): void;
|
|
46
45
|
setOpenAiKey(key: string): void;
|
|
@@ -56,8 +55,8 @@ export declare abstract class UserEvaluatorBase {
|
|
|
56
55
|
protected getSocialLinks(username: string): Promise<UserSocialLink[]>;
|
|
57
56
|
protected addHitReason(reason: HitReason): void;
|
|
58
57
|
hitReasons: HitReason[] | undefined;
|
|
59
|
-
abstract preEvaluateComment(event:
|
|
60
|
-
preEvaluateCommentEdit(event:
|
|
58
|
+
abstract preEvaluateComment(event: OnCommentCreateRequest): boolean | Promise<boolean>;
|
|
59
|
+
preEvaluateCommentEdit(event: OnCommentCreateRequest): boolean | Promise<boolean>;
|
|
61
60
|
abstract preEvaluatePost(post: Post): boolean | Promise<boolean>;
|
|
62
61
|
preEvaluatePostEdit(post: Post): boolean | Promise<boolean>;
|
|
63
62
|
abstract preEvaluateUser(user: UserExtended): boolean | Promise<boolean>;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UserEvaluatorBase = void 0;
|
|
4
|
-
const
|
|
4
|
+
const server_1 = require("@devvit/web/server");
|
|
5
|
+
const shared_1 = require("@devvit/web/shared");
|
|
5
6
|
const evaluatorHelpers_js_1 = require("./evaluatorHelpers.js");
|
|
6
7
|
const constants_js_1 = require("../constants.js");
|
|
7
8
|
class UserEvaluatorBase {
|
|
8
|
-
constructor(
|
|
9
|
+
constructor(history, socialLinks, variables) {
|
|
9
10
|
this.variables = {};
|
|
10
11
|
this.needsOpenAiKey = false;
|
|
11
12
|
this.banContentThreshold = 10;
|
|
12
13
|
this.canAutoBan = true;
|
|
13
14
|
this.hitReasons = undefined;
|
|
14
|
-
this.context = context;
|
|
15
15
|
this.socialLinks = socialLinks;
|
|
16
16
|
this.variables = variables;
|
|
17
|
-
this.verboseLogging = context.appSlug !== constants_js_1.MAIN_APP_NAME;
|
|
17
|
+
this.verboseLogging = server_1.context.appSlug !== constants_js_1.MAIN_APP_NAME;
|
|
18
18
|
this.regexWarnThreshold = this.getVariable("regexWarnThreshold", 100);
|
|
19
19
|
this.ignoredSubs = new Set(this.getGenericVariable("ignoredsubs", []));
|
|
20
20
|
this.history = history;
|
|
@@ -65,7 +65,7 @@ class UserEvaluatorBase {
|
|
|
65
65
|
return this.variables[`${module}:${name}`] ?? defaultValue;
|
|
66
66
|
}
|
|
67
67
|
async getSocialLinks(username) {
|
|
68
|
-
this.socialLinks ?? (this.socialLinks = await (0, evaluatorHelpers_js_1.getSocialLinksWithCache)(username
|
|
68
|
+
this.socialLinks ?? (this.socialLinks = await (0, evaluatorHelpers_js_1.getSocialLinksWithCache)(username));
|
|
69
69
|
return this.socialLinks;
|
|
70
70
|
}
|
|
71
71
|
addHitReason(reason) {
|
|
@@ -101,11 +101,11 @@ class UserEvaluatorBase {
|
|
|
101
101
|
return filteredHistory;
|
|
102
102
|
}
|
|
103
103
|
getComments(options) {
|
|
104
|
-
this.userComments ?? (this.userComments = this.history.filter(item => (0,
|
|
104
|
+
this.userComments ?? (this.userComments = this.history.filter(item => (0, shared_1.isT1)(item.id) && !this.ignoredSubs.has(item.subredditName)));
|
|
105
105
|
return this.getContent(this.userComments, options);
|
|
106
106
|
}
|
|
107
107
|
getPosts(options) {
|
|
108
|
-
this.userPosts ?? (this.userPosts = this.history.filter(item => (0,
|
|
108
|
+
this.userPosts ?? (this.userPosts = this.history.filter(item => (0, shared_1.isT3)(item.id) && !this.ignoredSubs.has(item.subredditName)));
|
|
109
109
|
return this.getContent(this.userPosts, options);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UserSocialLink } from "@devvit/web/server";
|
|
2
2
|
export declare function domainFromUrl(url: string): string | undefined;
|
|
3
|
-
export declare function getSocialLinksWithCache(username: string
|
|
3
|
+
export declare function getSocialLinksWithCache(username: string): Promise<UserSocialLink[]>;
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.domainFromUrl = domainFromUrl;
|
|
4
4
|
exports.getSocialLinksWithCache = getSocialLinksWithCache;
|
|
5
|
+
const server_1 = require("@devvit/web/server");
|
|
6
|
+
const fsv_devvit_web_helpers_1 = require("@fsvreddit/fsv-devvit-web-helpers");
|
|
5
7
|
const date_fns_1 = require("date-fns");
|
|
6
|
-
const devvit_helpers_1 = require("devvit-helpers");
|
|
7
8
|
function domainFromUrl(url) {
|
|
8
9
|
if (!url || url.startsWith("/")) {
|
|
9
10
|
// Reddit internal link or crosspost
|
|
@@ -13,13 +14,13 @@ function domainFromUrl(url) {
|
|
|
13
14
|
const trimmedHostname = hostname.startsWith("www.") ? hostname.substring(4) : hostname;
|
|
14
15
|
return trimmedHostname;
|
|
15
16
|
}
|
|
16
|
-
async function getSocialLinksWithCache(username
|
|
17
|
+
async function getSocialLinksWithCache(username) {
|
|
17
18
|
const cacheKey = `socialLinks:${username}`;
|
|
18
|
-
const cachedValue = await
|
|
19
|
+
const cachedValue = await server_1.redis.get(cacheKey);
|
|
19
20
|
if (cachedValue) {
|
|
20
21
|
return JSON.parse(cachedValue);
|
|
21
22
|
}
|
|
22
|
-
const userSocialLinks = await (0,
|
|
23
|
-
await
|
|
23
|
+
const userSocialLinks = await (0, fsv_devvit_web_helpers_1.getUserSocialLinks)(username);
|
|
24
|
+
await server_1.redis.set(cacheKey, JSON.stringify(userSocialLinks), { expiration: (0, date_fns_1.addMinutes)(new Date(), 5) });
|
|
24
25
|
return userSocialLinks;
|
|
25
26
|
}
|
|
@@ -3,6 +3,9 @@ export * from "./EvaluateBadDisplaynameDefinedHandles.js";
|
|
|
3
3
|
export * from "./EvaluateBadUsername.js";
|
|
4
4
|
export * from "./EvaluateBioText.js";
|
|
5
5
|
export * from "./EvaluateBioTextDefinedHandles.js";
|
|
6
|
+
export * from "./EvaluateBotGroupAdvanced.js";
|
|
7
|
+
export * from "./EvaluateBotGroupAdvancedInternal.js";
|
|
8
|
+
export * from "./EvaluateBotGroupSubmitters.js";
|
|
6
9
|
export * from "./EvaluateCommentPhrase.js";
|
|
7
10
|
export * from "./EvaluateDomainSharer.js";
|
|
8
11
|
export * from "./EvaluateInconsistentAgeBot.js";
|
|
@@ -13,15 +16,13 @@ export * from "./EvaluatePinnedPostTitle.js";
|
|
|
13
16
|
export * from "./EvaluatePostTitle.js";
|
|
14
17
|
export * from "./EvaluatePostTitleDefinedHandles.js";
|
|
15
18
|
export * from "./EvaluatePostTitleMulti.js";
|
|
19
|
+
export * from "./EvaluateRedgifs.js";
|
|
20
|
+
export * from "./EvaluateRepostBot.js";
|
|
16
21
|
export * from "./EvaluateSelfComment.js";
|
|
17
22
|
export * from "./EvaluateSocialLinks.js";
|
|
18
23
|
export * from "./EvaluateSuspiciousFirstPost.js";
|
|
24
|
+
export * from "./EvaluateTextInNsfwImages.js";
|
|
19
25
|
export * from "./EvaluateTGGroup.js";
|
|
20
26
|
export * from "./EvaluateWarmupBot.js";
|
|
21
|
-
export * from "./EvaluateBotGroupAdvanced.js";
|
|
22
|
-
export * from "./EvaluateBotGroupAdvancedInternal.js";
|
|
23
|
-
export * from "./EvaluateTitleCopyBot.js";
|
|
24
27
|
export * from "./EvaluateWorldTraveller.js";
|
|
25
|
-
export * from "./EvaluateBotGroupSubmitters.js";
|
|
26
|
-
export * from "./EvaluateRedgifs.js";
|
|
27
28
|
export * from "./UserEvaluatorBase.js";
|
|
@@ -19,6 +19,9 @@ __exportStar(require("./EvaluateBadDisplaynameDefinedHandles.js"), exports);
|
|
|
19
19
|
__exportStar(require("./EvaluateBadUsername.js"), exports);
|
|
20
20
|
__exportStar(require("./EvaluateBioText.js"), exports);
|
|
21
21
|
__exportStar(require("./EvaluateBioTextDefinedHandles.js"), exports);
|
|
22
|
+
__exportStar(require("./EvaluateBotGroupAdvanced.js"), exports);
|
|
23
|
+
__exportStar(require("./EvaluateBotGroupAdvancedInternal.js"), exports);
|
|
24
|
+
__exportStar(require("./EvaluateBotGroupSubmitters.js"), exports);
|
|
22
25
|
__exportStar(require("./EvaluateCommentPhrase.js"), exports);
|
|
23
26
|
__exportStar(require("./EvaluateDomainSharer.js"), exports);
|
|
24
27
|
__exportStar(require("./EvaluateInconsistentAgeBot.js"), exports);
|
|
@@ -29,15 +32,13 @@ __exportStar(require("./EvaluatePinnedPostTitle.js"), exports);
|
|
|
29
32
|
__exportStar(require("./EvaluatePostTitle.js"), exports);
|
|
30
33
|
__exportStar(require("./EvaluatePostTitleDefinedHandles.js"), exports);
|
|
31
34
|
__exportStar(require("./EvaluatePostTitleMulti.js"), exports);
|
|
35
|
+
__exportStar(require("./EvaluateRedgifs.js"), exports);
|
|
36
|
+
__exportStar(require("./EvaluateRepostBot.js"), exports);
|
|
32
37
|
__exportStar(require("./EvaluateSelfComment.js"), exports);
|
|
33
38
|
__exportStar(require("./EvaluateSocialLinks.js"), exports);
|
|
34
39
|
__exportStar(require("./EvaluateSuspiciousFirstPost.js"), exports);
|
|
40
|
+
__exportStar(require("./EvaluateTextInNsfwImages.js"), exports);
|
|
35
41
|
__exportStar(require("./EvaluateTGGroup.js"), exports);
|
|
36
42
|
__exportStar(require("./EvaluateWarmupBot.js"), exports);
|
|
37
|
-
__exportStar(require("./EvaluateBotGroupAdvanced.js"), exports);
|
|
38
|
-
__exportStar(require("./EvaluateBotGroupAdvancedInternal.js"), exports);
|
|
39
|
-
__exportStar(require("./EvaluateTitleCopyBot.js"), exports);
|
|
40
43
|
__exportStar(require("./EvaluateWorldTraveller.js"), exports);
|
|
41
|
-
__exportStar(require("./EvaluateBotGroupSubmitters.js"), exports);
|
|
42
|
-
__exportStar(require("./EvaluateRedgifs.js"), exports);
|
|
43
44
|
__exportStar(require("./UserEvaluatorBase.js"), exports);
|
package/dist/utility.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { User } from "@devvit/web/server";
|
|
2
|
+
import { JsonValue } from "@devvit/web/shared";
|
|
2
3
|
import { Document } from "yaml";
|
|
3
|
-
export declare function getUserOrUndefined(username: string
|
|
4
|
+
export declare function getUserOrUndefined(username: string): Promise<User | undefined>;
|
|
4
5
|
export interface DuplicateKeyInfo {
|
|
5
6
|
key: string;
|
|
6
7
|
path: string;
|
|
@@ -8,7 +9,7 @@ export interface DuplicateKeyInfo {
|
|
|
8
9
|
col: number;
|
|
9
10
|
}
|
|
10
11
|
export declare function findDuplicateKeysInDoc(doc: Document.Parsed): DuplicateKeyInfo[];
|
|
11
|
-
export declare function yamlToVariables(input: string, extraSubstitutions?: Record<string, string | string[]>): Record<string,
|
|
12
|
+
export declare function yamlToVariables(input: string, extraSubstitutions?: Record<string, string | string[]>): Record<string, JsonValue>;
|
|
12
13
|
export interface AdditionalUserInfo {
|
|
13
14
|
createdAt: Date;
|
|
14
15
|
userDescription?: string;
|
|
@@ -31,4 +32,4 @@ export interface AdditionalUserInfo {
|
|
|
31
32
|
hasVerifiedEmail: boolean;
|
|
32
33
|
isSubredditModerator: boolean;
|
|
33
34
|
}
|
|
34
|
-
export declare function getAdditionalUserInfo(username: string
|
|
35
|
+
export declare function getAdditionalUserInfo(username: string): Promise<AdditionalUserInfo | undefined>;
|
package/dist/utility.js
CHANGED
|
@@ -4,13 +4,14 @@ exports.getUserOrUndefined = getUserOrUndefined;
|
|
|
4
4
|
exports.findDuplicateKeysInDoc = findDuplicateKeysInDoc;
|
|
5
5
|
exports.yamlToVariables = yamlToVariables;
|
|
6
6
|
exports.getAdditionalUserInfo = getAdditionalUserInfo;
|
|
7
|
-
const
|
|
7
|
+
const server_1 = require("@devvit/web/server");
|
|
8
|
+
const fsv_devvit_web_helpers_1 = require("@fsvreddit/fsv-devvit-web-helpers");
|
|
8
9
|
const date_fns_1 = require("date-fns");
|
|
9
10
|
const yaml_1 = require("yaml");
|
|
10
|
-
async function getUserOrUndefined(username
|
|
11
|
+
async function getUserOrUndefined(username) {
|
|
11
12
|
let user;
|
|
12
13
|
try {
|
|
13
|
-
user = await
|
|
14
|
+
user = await server_1.reddit.getUserByUsername(username);
|
|
14
15
|
}
|
|
15
16
|
catch {
|
|
16
17
|
//
|
|
@@ -117,9 +118,9 @@ function yamlToVariables(input, extraSubstitutions = {}) {
|
|
|
117
118
|
variables.errors = errors;
|
|
118
119
|
return variables;
|
|
119
120
|
}
|
|
120
|
-
async function getAdditionalUserInfo(username
|
|
121
|
+
async function getAdditionalUserInfo(username) {
|
|
121
122
|
const cacheKey = `bbe:additionalUserInfo:${username}`;
|
|
122
|
-
const cachedData = await
|
|
123
|
+
const cachedData = await server_1.redis.get(cacheKey);
|
|
123
124
|
if (cachedData) {
|
|
124
125
|
const parsedData = JSON.parse(cachedData);
|
|
125
126
|
return {
|
|
@@ -134,7 +135,7 @@ async function getAdditionalUserInfo(username, context) {
|
|
|
134
135
|
isSubredditModerator: parsedData.isSubredditModerator,
|
|
135
136
|
};
|
|
136
137
|
}
|
|
137
|
-
const user = await (0,
|
|
138
|
+
const user = await (0, fsv_devvit_web_helpers_1.getUserExtended)(username);
|
|
138
139
|
if (!user) {
|
|
139
140
|
return;
|
|
140
141
|
}
|
|
@@ -149,7 +150,7 @@ async function getAdditionalUserInfo(username, context) {
|
|
|
149
150
|
hasVerifiedEmail: user.hasVerifiedEmail,
|
|
150
151
|
isSubredditModerator: user.isModerator,
|
|
151
152
|
};
|
|
152
|
-
await
|
|
153
|
+
await server_1.redis.set(cacheKey, JSON.stringify(dataToCache), { expiration: (0, date_fns_1.addMinutes)(new Date(), 10) });
|
|
153
154
|
return {
|
|
154
155
|
createdAt: user.createdAt,
|
|
155
156
|
userDescription: user.userDescription,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fsvreddit/bot-bouncer-evaluation",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Evaluation code for Bot Bouncer, a Dev Platform app designed to hunt bots on Reddit",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -20,10 +20,9 @@
|
|
|
20
20
|
"author": "fsv",
|
|
21
21
|
"license": "BSD-3-Clause",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@fsvreddit/fsv-devvit-helpers": "^0.
|
|
23
|
+
"@fsvreddit/fsv-devvit-web-helpers": "^0.2.3",
|
|
24
24
|
"@wordpress/wordcount": "^4.53.0",
|
|
25
25
|
"date-fns": "^4.1.0",
|
|
26
|
-
"devvit-helpers": "^0.11.0",
|
|
27
26
|
"lodash": "^4.17.21",
|
|
28
27
|
"markdown-escape": "^2.0.0",
|
|
29
28
|
"openai": "^7.5.0",
|
|
@@ -44,7 +43,7 @@
|
|
|
44
43
|
"devvit"
|
|
45
44
|
],
|
|
46
45
|
"peerDependencies": {
|
|
47
|
-
"@devvit/
|
|
48
|
-
"@devvit/
|
|
46
|
+
"@devvit/shared-types": "^0.14.7",
|
|
47
|
+
"@devvit/web": "^0.14.7"
|
|
49
48
|
}
|
|
50
49
|
}
|
package/tsconfig.build.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"exclude": [
|
|
4
|
-
"vitest.config.ts",
|
|
5
|
-
"node_modules",
|
|
6
|
-
"tests",
|
|
7
|
-
"dist",
|
|
8
|
-
"eslint.config.mjs"
|
|
9
|
-
],
|
|
10
|
-
"compilerOptions": {
|
|
11
|
-
"rootDir": "src",
|
|
12
|
-
"outDir": "dist",
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"exclude": [
|
|
4
|
+
"vitest.config.ts",
|
|
5
|
+
"node_modules",
|
|
6
|
+
"tests",
|
|
7
|
+
"dist",
|
|
8
|
+
"eslint.config.mjs"
|
|
9
|
+
],
|
|
10
|
+
"compilerOptions": {
|
|
11
|
+
"rootDir": "src",
|
|
12
|
+
"outDir": "dist",
|
|
13
|
+
}
|
|
14
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends": "@devvit/public-api/devvit.tsconfig.json",
|
|
3
2
|
"compilerOptions": {
|
|
4
3
|
"target": "ES2020",
|
|
5
4
|
"lib": [
|
|
@@ -13,6 +12,7 @@
|
|
|
13
12
|
"esModuleInterop": true,
|
|
14
13
|
"module": "NodeNext",
|
|
15
14
|
"moduleResolution": "NodeNext",
|
|
15
|
+
"skipLibCheck": true,
|
|
16
16
|
},
|
|
17
17
|
"exclude": [
|
|
18
18
|
"**/node_modules",
|