| import type { CommandFlagKey } from "../../config/commands.js"; |
| import { isCommandFlagEnabled } from "../../config/commands.js"; |
| import { logVerbose } from "../../globals.js"; |
| import { redactIdentifier } from "../../logging/redact-identifier.js"; |
| import { isInternalMessageChannel } from "../../utils/message-channel.js"; |
| import type { ReplyPayload } from "../types.js"; |
| import type { CommandHandlerResult, HandleCommandsParams } from "./commands-types.js"; |
|
|
| export function rejectUnauthorizedCommand( |
| params: HandleCommandsParams, |
| commandLabel: string, |
| ): CommandHandlerResult | null { |
| if (params.command.isAuthorizedSender) { |
| return null; |
| } |
| logVerbose( |
| `Ignoring ${commandLabel} from unauthorized sender: ${redactIdentifier(params.command.senderId)}`, |
| ); |
| return { shouldContinue: false }; |
| } |
|
|
| export function rejectNonOwnerCommand( |
| params: HandleCommandsParams, |
| commandLabel: string, |
| ): CommandHandlerResult | null { |
| if (params.command.senderIsOwner) { |
| return null; |
| } |
| logVerbose( |
| `Ignoring ${commandLabel} from non-owner sender: ${redactIdentifier(params.command.senderId)}`, |
| ); |
| return { shouldContinue: false }; |
| } |
|
|
| export function requireGatewayClientScopeForInternalChannel( |
| params: HandleCommandsParams, |
| config: { |
| label: string; |
| allowedScopes: string[]; |
| missingText: string; |
| }, |
| ): CommandHandlerResult | null { |
| if (!isInternalMessageChannel(params.command.channel)) { |
| return null; |
| } |
| const scopes = params.ctx.GatewayClientScopes ?? []; |
| if (config.allowedScopes.some((scope) => scopes.includes(scope))) { |
| return null; |
| } |
| logVerbose( |
| `Ignoring ${config.label} from gateway client missing scope: ${config.allowedScopes.join(" or ")}`, |
| ); |
| return { |
| shouldContinue: false, |
| reply: { text: config.missingText }, |
| }; |
| } |
|
|
| export function buildDisabledCommandReply(params: { |
| label: string; |
| configKey: CommandFlagKey; |
| disabledVerb?: "is" | "are"; |
| docsUrl?: string; |
| }): ReplyPayload { |
| const disabledVerb = params.disabledVerb ?? "is"; |
| const docsSuffix = params.docsUrl ? ` Docs: ${params.docsUrl}` : ""; |
| return { |
| text: `⚠️ ${params.label} ${disabledVerb} disabled. Set commands.${params.configKey}=true to enable.${docsSuffix}`, |
| }; |
| } |
|
|
| export function requireCommandFlagEnabled( |
| cfg: { commands?: unknown } | undefined, |
| params: { |
| label: string; |
| configKey: CommandFlagKey; |
| disabledVerb?: "is" | "are"; |
| docsUrl?: string; |
| }, |
| ): CommandHandlerResult | null { |
| if (isCommandFlagEnabled(cfg, params.configKey)) { |
| return null; |
| } |
| return { |
| shouldContinue: false, |
| reply: buildDisabledCommandReply(params), |
| }; |
| } |
|
|