# Gated

`function` in `seedcord` · v0.15.0

<https://docs.seedcord.org/packages/seedcord/0.15.0/functions/gated>

Attaches gates to a handler. The gates run before `execute`, and a gate refusing stops the handler with the reply or drop the gate threw. Multiple gates are ANDed, so each must pass. A gate that requires a context the handler does not provide (a button gate on a slash handler, an interaction gate on an event handler) is a compile error at this line, and the error names the gate and the handler kind. Place it above the route decorator.

Combine gates with [`and`](/packages/seedcord/0.15.0/functions/and) or [`or`](/packages/seedcord/0.15.0/functions/or) to build a single gate from multiple arms.

```ts
Gated<Gates>(
    gates: Gates
): <TCtor extends AnyHandlerCtor>(
    ctor: FitAll<TCtor, Gates> extends Gates
        ? TCtor
        : FitAll<TCtor, Gates>
) => void
```

Attaches gates to a handler. The gates run before `execute`, and a gate refusing stops the handler with the reply or drop the gate threw. Multiple gates are ANDed, so each must pass. A gate that requires a context the handler does not provide (a button gate on a slash handler, an interaction gate on an event handler) is a compile error at this line, and the error names the gate and the handler kind. Place it above the route decorator.

Combine gates with [`and`](/packages/seedcord/0.15.0/functions/and) or [`or`](/packages/seedcord/0.15.0/functions/or) to build a single gate from multiple arms.

Parameters.

- `gates` `Gates` — One or more gates to attach, each ANDed so the handler runs only when all pass.

Returns `<TCtor extends AnyHandlerCtor>(ctor: FitAll<TCtor, Gates> extends Gates ? TCtor : FitAll<TCtor, Gates>) => void`.
