Skip to content
Snippets Groups Projects
Verified Commit a84ce9df authored by Mateusz Tyszczak's avatar Mateusz Tyszczak :scroll:
Browse files

Parse user mentions from post JSON metadata instead of raw body

parent 4dac1e5a
No related branches found
No related tags found
1 merge request!25Add missing filters and providers
import type { WorkerBee } from "../../bot"; import type { WorkerBee } from "../../bot";
import { mentionedAccount } from "../../utils/mention";
import { OperationClassifier } from "../classifiers"; import { OperationClassifier } from "../classifiers";
import type { TRegisterEvaluationContext } from "../classifiers/collector-classifier-base"; import type { TRegisterEvaluationContext } from "../classifiers/collector-classifier-base";
import type { DataEvaluationContext } from "../factories/data-evaluation-context"; import type { DataEvaluationContext } from "../factories/data-evaluation-context";
...@@ -23,8 +22,14 @@ export class PostMentionFilter extends FilterBase { ...@@ -23,8 +22,14 @@ export class PostMentionFilter extends FilterBase {
const { operationsPerType } = await data.get(OperationClassifier); const { operationsPerType } = await data.get(OperationClassifier);
for(const { operation } of (operationsPerType.comment ?? [])) for(const { operation } of (operationsPerType.comment ?? []))
if (mentionedAccount(this.account, operation.body)) try {
return true; const jsonMetadata = JSON.parse(operation.json_metadata);
if ("users" in jsonMetadata && Array.isArray(jsonMetadata.users))
if (jsonMetadata.users.indexOf(this.account) !== -1)
return true;
// eslint-disable-next-line no-empty
} catch {}
return false; return false;
} }
......
import { comment, TAccountName } from "@hiveio/wax"; import { comment, TAccountName } from "@hiveio/wax";
import { WorkerBeeIterable } from "../../types/iterator"; import { WorkerBeeIterable } from "../../types/iterator";
import { mentionedAccount } from "../../utils/mention";
import { OperationClassifier } from "../classifiers"; import { OperationClassifier } from "../classifiers";
import { TRegisterEvaluationContext } from "../classifiers/collector-classifier-base"; import { TRegisterEvaluationContext } from "../classifiers/collector-classifier-base";
import { DataEvaluationContext } from "../factories/data-evaluation-context"; import { DataEvaluationContext } from "../factories/data-evaluation-context";
...@@ -34,8 +33,14 @@ export class MentionedAccountProvider<TMentions extends Array<TAccountName> = Ar ...@@ -34,8 +33,14 @@ export class MentionedAccountProvider<TMentions extends Array<TAccountName> = Ar
for(const { operation } of (operationsPerType.comment ?? [])) for(const { operation } of (operationsPerType.comment ?? []))
for(const account of this.accounts) for(const account of this.accounts)
if (mentionedAccount(account, operation.body)) try {
mentioned[account].push(operation); const jsonMetadata = JSON.parse(operation.json_metadata);
if ("users" in jsonMetadata && Array.isArray(jsonMetadata.users))
if (jsonMetadata.users.indexOf(account) !== -1)
mentioned[account].push(operation);
// eslint-disable-next-line no-empty
} catch {}
return { return {
......
import type { TAccountName } from "@hiveio/wax";
export const mentionedAccount = (accountName: TAccountName, message: string): boolean => {
let lastIndexOf = -1;
while((lastIndexOf = message.indexOf(`@${accountName}`, lastIndexOf + 1)) !== -1) {
const nextChar = message[lastIndexOf + accountName.length + 1];
switch(nextChar) {
case "a": case "b": case "c": case "d": case "e": case "f": case "g": case "h":
case "i": case "j": case "k": case "l": case "m": case "n": case "o": case "p":
case "q": case "r": case "s": case "t": case "u": case "v": case "w": case "x":
case "y": case "z":
case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7":
case "8": case "9":
case "-": case ".":
continue;
default:
return true; // - next char is not a possible username character, so we have a mention
}
}
return false;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment