export function detectJunieTriggerPhrase()

in src/github/validation/trigger.ts [18:88]


export function detectJunieTriggerPhrase(context: JunieExecutionContext): boolean {
    const {
        inputs: {assigneeTrigger, labelTrigger, triggerPhrase},
    } = context;
    const triggerPhraseRegex = new RegExp(`(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`, 'i');

    if (isIssuesAssignedEvent(context)) {
        let triggerUser = assigneeTrigger.replace(/^@/, "");
        const assigneeUsername = context.payload.assignee?.login || "";

        if (triggerUser && assigneeUsername === triggerUser) {
            console.log(`Issue assigned to trigger user '${triggerUser}'`);
            return true;
        }
    }

    if (isIssuesEvent(context) && context.eventAction === "labeled") {
        const labelName = (context.payload as any).label?.name || "";

        if (labelTrigger && labelName === labelTrigger) {
            console.log(`Issue labeled with trigger label '${labelTrigger}'`);
            return true;
        }
    }

    if (isIssuesEvent(context) && context.eventAction === "opened") {
        const issueBody = context.payload.issue.body || "";
        const issueTitle = context.payload.issue.title || "";

        if (triggerPhraseRegex.test(issueBody)) {
            console.log(
                `Issue body contains exact trigger phrase '${triggerPhrase}'`,
            );
            return true;
        }

        if (triggerPhraseRegex.test(issueTitle)) {
            console.log(
                `Issue title contains exact trigger phrase '${triggerPhrase}'`,
            );
            return true;
        }
    }

    if (isPullRequestEvent(context)) {
        const prBody = context.payload.pull_request.body || "";
        const prTitle = context.payload.pull_request.title || "";

        if (triggerPhraseRegex.test(prBody)) {
            console.log(
                `Pull request body contains exact trigger phrase '${triggerPhrase}'`,
            );
            return true;
        }

        if (triggerPhraseRegex.test(prTitle)) {
            console.log(
                `Pull request title contains exact trigger phrase '${triggerPhrase}'`,
            );
            return true;
        }
    }
    const hasTrigger = isReviewOrCommentHasTrigger(context, triggerPhraseRegex)

    if (hasTrigger) {
        return true;
    }

    console.log(`No trigger was met for ${triggerPhrase}`);
    return false;
}