> ## Documentation Index
> Fetch the complete documentation index at: https://docs.headlesslabs.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Link Guard & Vanity

> Configura el detector de invitaciones y enlaces, el tracker de invitaciones y los rewards de Vanity Status con sus límites reales.

Esta página reúne tres flujos distintos bajo el módulo Vanity: la detección de invitaciones y enlaces no permitidos, la atribución de invitaciones de nuevos miembros y los roles vinculados a un código de invitación en el estado de Discord. No es un sistema general de vanity roles.

> **Setup con cuidado**
>
> `.vanity quick` activa el detector y el tracker, puede cambiar `log` a `delete` y selecciona un canal de avisos. No es un modo de prueba.

> **Tracker independiente**
>
> El tracker atribuye joins cuando puede comparar el uso de invites en caché. Desactivar sus avisos no detiene la actualización de estadísticas.

> **Acciones y límites**
>
> El runtime actual intenta borrar cada mensaje detectado por Link Guard antes de aplicar la acción seleccionada, incluso con `log`.

## Acceso y alcance

Los comandos de configuración se ejecutan dentro de un servidor y requieren `Administrator` nativo o la autorización virtual compatible que Headless aplique a esa comprobación. El comando slash `/vanity` solo cambia el estado del detector; los demás grupos de configuración descritos aquí son de prefijo. La configuración de detector, allowlists, tracker y rewards está separada por servidor.

## Link Guard

El detector revisa invitaciones de Discord y enlaces en mensajes. El código vanity oficial del servidor se considera permitido automáticamente; las allowlists añaden excepciones. Puedes permitir una invitación/código, una URL o dominio, un comodín de subdominio, una ruta o las categorías `discord`, `youtube` y `roblox`. Las rutas permiten el prefijo de path configurado y una regla de dominio también coincide con sus subdominios. Se guardan hasta 120 reglas de enlace y 80 roles exentos. Un rol exento evita que sus miembros activen el detector; no les concede permisos de moderación.

Las acciones configurables son `log`, `delete`, `warn`, `timeout`, `kick` y `ban`. El timeout se limita a 1–10 080 minutos. Headless registra coincidencias y, en la ruta activa de detección, intenta borrar el mensaje bloqueado en todos los modos antes de ejecutar la respuesta. Por eso `log` no garantiza conservar el mensaje: el código también publica un aviso después del intento de borrado. Si Discord rechaza el borrado o una sanción, la operación puede quedar parcialmente aplicada; los fallos de sanción se envían a Logs.

> [!WARNING]
>
> Si necesitas observar enlaces sin borrar mensajes, no actives el detector suponiendo que `log` sea pasivo. La implementación actual intenta eliminar el mensaje detectado aun con `log`; primero revisa la política del servidor y prueba en un canal de prueba.

> **Comandos del detector**
>
> * **Estado** — **Comando:** `.vanity` · **Efecto:** Muestra estado, acción, timeout, invites/enlaces permitidos y estado del tracker.
> * **Activar / pausar** — **Comando:** `.vanity on` · `.vanity off` · `/vanity enabled:true|false` · **Efecto:** Cambia el flag del detector; no activa ni apaga el tracker.
> * **Setup rápido** — **Comando:** `.vanity quick [#canal]` · **Efecto:** Activa el módulo, el detector y el tracker, selecciona el canal, intenta sincronizar invites y cambia `log` a `delete` si `log` era la acción configurada.
> * **Respuesta** — **Comando:** `.vanity action ACTION` · **Efecto:** `ACTION` debe ser `log`, `delete`, `warn`, `timeout`, `kick` o `ban`.
> * **Duración** — **Comando:** `.vanity timeout <minutos>` · **Efecto:** Guarda un timeout entre 1 y 10 080 minutos; el valor predeterminado es 10.
> * **Invitaciones** — **Comando:** `.vanity allow <invite>` · `.vanity disallow <invite>` · **Efecto:** Añade o quita un código/URL de la allowlist.
> * **Enlaces** — **Comando:** `.vanity allowlink <dominio o URL>` · `.vanity disallowlink <dominio o URL>` · **Efecto:** Añade o quita reglas; máximo 120 entradas guardadas.
> * **Bypass por rol** — **Comando:** `.vanity role @Rol` · `.vanity unrole @Rol` · **Efecto:** Añade o quita roles exentos; máximo 80.
>
> El grupo también acepta los alias `.vn`, `.v`, `.van` y `.inviteguard`. `quick` activa directamente los controles; no pide confirmación ni prueba el disparador. La acción de borrado del runtime puede ejecutarse antes de que falle una acción de timeout, kick o ban.

> **Qué se comprueba al publicar un mensaje**
>
> Headless detecta invitaciones y enlaces, normaliza cada coincidencia y compara códigos, dominios/rutas y roles exentos con la configuración del servidor. Si no hay coincidencias bloqueadas, no responde. Si las hay, crea un evento `vanity_detected` con parte del mensaje y la acción elegida, intenta entregarlo a Logs, intenta borrar el mensaje y luego aplica la respuesta. La allowlist no hace que un enlace permita cualquier otro enlace del mismo mensaje; cada coincidencia debe pasar la regla.

## Invite Tracker

El tracker es independiente del filtro de enlaces. Cuando un miembro entra, Headless compara el contador de usos de invitaciones disponible con la caché anterior. Si puede identificar el código y su invitador, actualiza estadísticas por servidor, invitador y código; si no puede atribuir el join, el dato queda desconocido o no se añade a un invitador. No reconstruye actividad anterior al periodo observado.

`.vanity tracker sync` vuelve a leer y cachear las invitaciones actuales; requiere que el bot tenga `Manage Server` para consultar invites. No importa joins históricos. `announce off` solo detiene los mensajes de bienvenida del tracker: las estadísticas pueden seguir actualizándose. Si el canal configurado no está disponible, el runtime puede recurrir al canal general de Logs.

> **Configurar y consultar el tracker**
>
> * **Ver estado** — **Comando:** `.vanity tracker` · **Nota:** Muestra el destino, formato y estadísticas resumidas.
> * **Activar / pausar** — **Comando:** `.vanity tracker on` · `.vanity tracker off` · **Nota:** `on` también habilita el módulo Vanity; `off` no apaga el Link Guard.
> * **Elegir destino** — **Comando:** `.vanity tracker channel [#canal]` · **Nota:** Sin canal usa el canal actual, si es de texto.
> * **Avisos** — **Comando:** `.vanity tracker announce STATE` · **Nota:** `STATE` acepta `on` u `off`; desactiva solo la publicación, no la atribución.
> * **Formato** — **Comando:** `.vanity tracker format FORMAT` · **Nota:** `FORMAT` acepta `embed` o `text` y selecciona el mensaje de entrada.
> * **Plantilla** — **Comando:** `.vanity tracker template [texto]` · **Nota:** Variables disponibles: `{member}`, `{member_name}`, `{inviter}`, `{inviter_name}`, `{invite}`, `{joins}` y `{server}`. La plantilla se limita a 450 caracteres.
> * **Sincronizar** — **Comando:** `.vanity tracker sync` · **Nota:** Requiere `Manage Server` del bot para leer invitaciones actuales.
> * **Estadísticas** — **Comando:** `.vanity tracker stats [@miembro]` · **Nota:** Sin miembro muestra hasta 10 invitadores; con miembro, sus joins y hasta ocho códigos.
>
> Los comandos de configuración del tracker requieren el mismo acceso de administrador del grupo `.vanity`.

## Reward de Vanity Status

Este reward observa el estado personalizado de presencia, no los mensajes con invitaciones. Se controla con `.vanity promo status on|off`; `statuscode <código>` y `removestatuscode <código>` mantienen hasta 20 códigos. Headless puede asignar hasta 20 roles configurados mediante `.vanity promo role @Rol`. El bot necesita el intent privilegiado de presencias habilitado en la aplicación Discord, un miembro disponible en el gateway, `Manage Roles` y una posición de rol que permita la asignación. `.vanity promo statuschannel #canal` elige el panel; `.vanity promo scan` revisa solo los miembros que están en la caché del servidor.

`.vanity promo statusremove on|off` controla la retirada al desaparecer el código del estado; el retraso acepta 0–604 800 segundos. La retirada es de mejor esfuerzo: si Discord rechaza quitar un rol, el registro puede dejar de reflejarlo y el rol permanecer asignado. Verifica periódicamente la jerarquía y los roles existentes.

**Nota:**

`.vanity promo on|off` controla el panel/avisos del estado, mientras que `.vanity promo status on|off` controla el reward de roles. Son toggles distintos. La personalización admite plantilla, título, ping (sin menciones activas), thumbnail, banner y GIF.

> [!NOTE]
>
> La promoción automática cuando una persona publica un invite está configurada en el grupo `.vanity promo`, pero su callback de mensaje no está conectado en el runtime revisado. No la trates como una función activa. El reward implementado es el de Vanity Status.

## Pasos

**1. Revisa la acción y los permisos**

Consulta `.vanity` y comprueba los permisos del bot. No uses `quick` como prueba: habilita el detector y el tracker, y puede cambiar `log` a `delete`.

**2. Configura excepciones pequeñas**

Añade únicamente invites, dominios/rutas y roles que deban quedar exentos. Comprueba cada URL permitida con un caso de prueba del servidor.

**3. Decide si activar el detector**

Como el callback intenta borrar el mensaje incluso con `log`, habilítalo solo cuando esa conducta esté aprobada. Selecciona una acción explícita y observa Logs.

**4. Configura por separado el tracker o reward**

Sincroniza invites para el tracker. Para rewards de estado, habilita presencia, valida jerarquía y configura los roles y el canal de estado por separado.

## Comandos por flujo

### Allowlist de invites, enlaces y roles

```headless-command Syntax theme={null}
.vanity allow <invite>
```

```headless-command Example theme={null}
.vanity allow a1B2c3
```

```headless-command Syntax theme={null}
.vanity allowlink <item>
```

```headless-command Example theme={null}
.vanity allowlink roblox.com
```

```headless-command Syntax theme={null}
.vanity role <role>
```

```headless-command Example theme={null}
.vanity role @Trusted
```

### Atribución y estadísticas de invitaciones

```headless-command Syntax theme={null}
.vanity tracker sync
```

```headless-command Example theme={null}
.vanity tracker sync
```

```headless-command Syntax theme={null}
.vanity tracker channel [channel]
```

```headless-command Example theme={null}
.vanity tracker channel #invites
```

```headless-command Syntax theme={null}
.vanity tracker stats [member]
```

```headless-command Example theme={null}
.vanity tracker stats @Inviter
```

### Reward de estado Vanity

#### `.vanity promo status`

```headless-command Syntax theme={null}
.vanity promo status <state>
```

```headless-command Example theme={null}
.vanity promo status on
```

#### `.vanity promo statuscode`

```headless-command Syntax theme={null}
.vanity promo statuscode <code>
```

```headless-command Example theme={null}
.vanity promo statuscode verified
```

#### `.vanity promo role`

```headless-command Syntax theme={null}
.vanity promo role <role>
```

```headless-command Example theme={null}
.vanity promo role @MiembroVerificado
```

#### `.vanity promo statuschannel`

```headless-command Syntax theme={null}
.vanity promo statuschannel <channel>
```

```headless-command Example theme={null}
.vanity promo statuschannel #vanity-status
```

## Páginas relacionadas

* [Honeyspot](/docs/security/honeyspot.md)
* [Registros](/docs/server/logging.md)
* [Roles](/docs/server/roles.md)
* [Headless Permissions](/docs/permissions.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.