refactor: unify channel config matching and gating
Co-authored-by: thewilloftheshadow <thewilloftheshadow@users.noreply.github.com>
This commit is contained in:
@@ -11,6 +11,22 @@ export type MentionGateResult = {
|
||||
shouldSkip: boolean;
|
||||
};
|
||||
|
||||
export type MentionGateWithBypassParams = {
|
||||
isGroup: boolean;
|
||||
requireMention: boolean;
|
||||
canDetectMention: boolean;
|
||||
wasMentioned: boolean;
|
||||
implicitMention?: boolean;
|
||||
hasAnyMention?: boolean;
|
||||
allowTextCommands: boolean;
|
||||
hasControlCommand: boolean;
|
||||
commandAuthorized: boolean;
|
||||
};
|
||||
|
||||
export type MentionGateWithBypassResult = MentionGateResult & {
|
||||
shouldBypassMention: boolean;
|
||||
};
|
||||
|
||||
export function resolveMentionGating(params: MentionGateParams): MentionGateResult {
|
||||
const implicit = params.implicitMention === true;
|
||||
const bypass = params.shouldBypassMention === true;
|
||||
@@ -18,3 +34,26 @@ export function resolveMentionGating(params: MentionGateParams): MentionGateResu
|
||||
const shouldSkip = params.requireMention && params.canDetectMention && !effectiveWasMentioned;
|
||||
return { effectiveWasMentioned, shouldSkip };
|
||||
}
|
||||
|
||||
export function resolveMentionGatingWithBypass(
|
||||
params: MentionGateWithBypassParams,
|
||||
): MentionGateWithBypassResult {
|
||||
const shouldBypassMention =
|
||||
params.isGroup &&
|
||||
params.requireMention &&
|
||||
!params.wasMentioned &&
|
||||
!(params.hasAnyMention ?? false) &&
|
||||
params.allowTextCommands &&
|
||||
params.commandAuthorized &&
|
||||
params.hasControlCommand;
|
||||
return {
|
||||
...resolveMentionGating({
|
||||
requireMention: params.requireMention,
|
||||
canDetectMention: params.canDetectMention,
|
||||
wasMentioned: params.wasMentioned,
|
||||
implicitMention: params.implicitMention,
|
||||
shouldBypassMention,
|
||||
}),
|
||||
shouldBypassMention,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user