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

# Como as variáveis são resolvidas

> O que acontece quando uma {variável} vira texto de verdade: a ordem dos passos, o que fazem as variáveis desconhecidas ou vazias, o idioma das palavras e como testar uma mensagem.

## A versão curta

Quase todo lugar que aceita [variáveis](https://wiki.petto.sbs/pt-br/resources/scripting/variables.md) usa o mesmo resolvedor: ele pega o seu texto, encontra cada `{variable}` nele e troca pelos dados do que disparou a mensagem (o membro que entrou, o sorteio que terminou, a mensagem que ativou uma resposta automática). Os dados disponíveis dependem desse evento; as regras, não.

## A ordem dos passos

**1. Imagens e reações são retiradas**

`{imgcard:name}` é removido do texto e vira o [cartão de imagem](https://wiki.petto.sbs/pt-br/resources/image-cards.md) da mensagem. `{reactreply:emoji}` é removido e vira uma reação na mensagem enviada.

![O Petto dá boas-vindas a Mia com um embed cuja imagem é o cartão de boas-vindas com o nome e o número de membro dela, e uma reação 👋 embaixo](https://mintcdn.com/wikipetto/aURko5p8En80OELa/images/discord/concepts/pt-br/variables-engine-step-1-card.webp?fit=max\&auto=format\&n=aURko5p8En80OELa\&q=85\&s=9e9a826a95dc36cc82a98296f047a9de)

No Discord: \{imgcard:welcome} virou o cartão do embed e \{reactreply:👋} uma reação.

**2. As funções rodam**

`{choose:a|b|c}`, `{timestamp:<when>|<style>}`, `{range:1-100}`, `{arg1}` … `{arg10}` e `{args_from:N}` são calculados, de novo a cada vez. A mesma mensagem salva dá um `{choose:…}` ou `{range:…}` diferente cada vez que é enviada.

![kira usa !roll duas vezes e recebe um número e uma frase diferentes a cada vez](https://mintcdn.com/wikipetto/aURko5p8En80OELa/images/discord/concepts/pt-br/variables-engine-step-2-functions.webp?fit=max\&auto=format\&n=aURko5p8En80OELa\&q=85\&s=31706c70e8592166837cf96cf6d82a73)

No Discord: o mesmo comando duas vezes: \{range} e \{choose} são escolhidos de novo a cada vez.

**3. Todo o resto é buscado de uma só vez**

Cada `{name}` que sobrou é comparado, ignorando maiúsculas e espaços dentro das chaves, com a lista do Petto e depois com os [nomes que outros bots usam](https://wiki.petto.sbs/pt-br/resources/scripting/variables.md#escrevendo-variáveis). O que uma variável devolve nunca é lido de novo, então um membro que escreve `{server_owner}` em uma mensagem não faz o `{message_content}` mencionar o dono.

![nova escreve \{server\_owner} em uma mensagem e a resposta do Petto o repete como texto, sem mencionar o dono](https://mintcdn.com/wikipetto/aURko5p8En80OELa/images/discord/concepts/pt-br/variables-engine-step-3-one-pass.webp?fit=max\&auto=format\&n=aURko5p8En80OELa\&q=85\&s=b478844504a8185ef2ae017e987b20bc)

No Discord: \{server\_owner} escrito por um membro fica como texto dentro de \{message\_content}.

Como as funções rodam primeiro, uma função não pode conter outras variáveis: em `{choose:Oi {user}|Olá}` o primeiro `}` fecha a função antes da hora. Escreva `{choose:Oi|Olá} {user}` em vez disso.

## Conhecidas, desconhecidas e vazias

| Você escreve | O que acontece |
| - | - |
| Uma variável que tem dados aqui | É trocada pelos dados: `{user}` → @Liam |
| Uma variável que o Petto conhece, mas sem dados neste evento | Vazia: `{level}` numa mensagem de boas-vindas desaparece. Algumas dizem o porquê: `N/A`, `Desconhecido`, `Nunca`, `Sem impulso` |
| Algo que o Petto não conhece | Fica exatamente como foi escrito: `{usr}` continua `{usr}`, então os erros de digitação aparecem |

![O Petto preenche \{user} com chu, deixa \{level} vazia entre os colchetes e mantém \{usr} como foi escrita](https://mintcdn.com/wikipetto/aURko5p8En80OELa/images/discord/concepts/pt-br/variables-engine-known-unknown.webp?fit=max\&auto=format\&n=aURko5p8En80OELa\&q=85\&s=433dc782db6f8a58656385b34fef45cd)

No Discord: uma variável conhecida, uma conhecida sem dados aqui e uma desconhecida.

É por isso que as variáveis de Níveis só fazem sentido na mensagem de subida de nível e `{gw.*}` só nas mensagens de sorteios. Usá-las em outro lugar não faz mal, elas só não dão nada.

## Dois estilos de nome, mesmo resultado

`{user_name}` e `{user.name}` resolvem igual. O estilo com sublinhado é o conjunto original; o estilo com ponto foi adicionado para facilitar a leitura e combina com `{guild.*}`, `{channel.*}` e o resto. Nenhum dos dois vai sumir, use o que ler melhor.

## Palavras e datas seguem o idioma do servidor

As palavras que o próprio Petto escreve numa variável (`Sim`, `Nunca`, `Nível 2`, `Sem impulso`), datas como `{user.joined_at}` e as terminações ordinais (`1st`, `1.º`, `1º`) seguem o [idioma](https://wiki.petto.sbs/pt-br/setup/language.md) do servidor. O seu próprio texto, os nomes e os dados do servidor nunca são traduzidos. `{date}` usa o horário da Colômbia (GMT-5); para um horário que aparece no fuso de cada leitor, use as variáveis `{timestamp…}`.

![O Petto preenche \{user.boost}, \{user.boost\_since}, \{user.joined\_at}, \{user.join\_position\_suffix} e \{guild.boost\_tier} para chu](https://mintcdn.com/wikipetto/aURko5p8En80OELa/images/discord/concepts/pt-br/variables-engine-language.webp?fit=max\&auto=format\&n=aURko5p8En80OELa\&q=85\&s=40f9e3125539cbe9b67e803a63770359)

No Discord: as palavras, datas e terminações ordinais que o Petto escreve, no idioma do servidor.

## Menções silenciosas

Coloque um `!` logo antes de uma menção e ela aparece como a menção azul de sempre, mas ninguém recebe notificação. Sem o `!`, a menção funciona como sempre. Vale para qualquer mensagem que o Petto envia, então você pode escrever sobre quem é a mensagem sem acordar ninguém.

![O Petto publica em anuncios: @everyone A noite de cinema começa às 20h na sala de voz. Dúvidas? Pergunte aos @Moderadores. As duas menções aparecem como pílulas azuis](https://mintcdn.com/wikipetto/eojafFVcTfRMMMhR/images/discord/concepts/pt-br/silent-mentions.webp?fit=max\&auto=format\&n=eojafFVcTfRMMMhR\&q=85\&s=020f488ccf65f8a8c38b3b9845ebe61a)

No Discord: a mensagem foi escrita com !@everyone e !@Moderadores. As duas aparecem como menções e ninguém recebe notificação.

### As formas

| Você escreve | O que aparece |
| - | - |
| `!@everyone` e `!@here` | `@everyone` e `@here` |
| `!@Moderadores` | O cargo do servidor com esse nome, sem diferenciar maiúsculas |
| `!@"Equipe Staff"` | Um cargo cujo nome tem espaços |
| `!<@&123456789012345678>` | Um cargo pelo ID |
| `!<@123456789012345678>` e `!<@!123456789012345678>` | Um membro pelo ID |
| `!<#123456789012345678>` | Um canal. A menção de um canal nunca notifica, então o `!` só é removido |
| `!{user.mention}` e `!{role.mention}` | As [variáveis](https://wiki.petto.sbs/pt-br/resources/scripting/variables.md) que mencionam um membro ou um cargo, sem a notificação |

```text Exemplo theme={null}
!@everyone A noite de cinema começa às 20h. Dúvidas? Pergunte aos !@Moderadores ou a !{user.mention}.
```

### As regras

* O `!` vai no começo do texto ou depois de um espaço, uma quebra de linha ou pontuação. `Oi !@here` e `(!@here)` são silenciosas, `oi!@here` não.
* Para mostrar os caracteres `!@everyone` como texto, escreva `\!@everyone`.
* Importa em mensagens normais e no texto de Components V2, que é onde uma menção pode notificar. No título, na descrição, nos campos e no rodapé de um embed clássico uma menção nunca notifica, então ali o `!` só é removido.
* Uma mensagem com menções silenciosas e normais notifica só as normais.
* O único limite: um `@everyone` silencioso ao lado de um `@everyone` normal na mesma mensagem notifica, porque o Discord decide isso uma vez por mensagem. Use um só tipo em cada mensagem.
* O `!` só remove notificações, nunca adiciona. Um recurso que nunca avisa (os temporizadores e os feeds, por exemplo) não avisa com ou sem ele.
* As prévias do dashboard desenham a menção silenciosa como uma menção normal, sem o `!`.

### Quando usar

Use quando uma mensagem deve mostrar sobre quem ela é ou a quem perguntar, sem acordar ninguém: um anúncio que cita `!@everyone` ou `!@Moderadores` como texto, uma boas-vindas que diz `Pergunte aos !@Moderadores se precisar de ajuda`, ou uma mensagem de sorteio que cita o cargo dos ganhadores. Para um aviso de verdade, escreva a menção como sempre.

## Testando uma mensagem

Você não precisa de um evento real para ver o resultado:

* `!welcome test`, `!leave test`, `!boost test` e `!dmonjoin test` enviam a mensagem com a sua própria conta como o membro.
* `!embed preview <name>` monta um embed salvo com você como o membro e o canal atual, então as variáveis são preenchidas.
* As prévias do [dashboard](https://petto.sbs/dash) preenchem as variáveis com dados de exemplo (um membro chamado Liam, um servidor com 1.204 membros), e uma mensagem de teste enviada pelo dashboard usa a sua conta e o seu servidor de verdade.

![liam usa !welcome test e o Petto escreve as boas-vindas com liam como membro, o nome do servidor, a contagem de membros e uma das duas opções](https://mintcdn.com/wikipetto/aURko5p8En80OELa/images/discord/concepts/pt-br/variables.webp?fit=max\&auto=format\&n=aURko5p8En80OELa\&q=85\&s=4d720e0e69e1ba5e677e0643a0e60f3d)

No Discord: um texto de boas-vindas testado com !welcome test, com cada variável preenchida.

As variáveis de um evento (um número de caso, um prêmio de sorteio, um nível) ficam vazias numa prévia, porque ainda não existe evento.

## Onde este resolvedor é usado

Mensagens de boas-vindas, saída, boost, DM ao entrar e aniversário, respostas automáticas, comandos personalizados, subidas de nível, sorteios, mensagens de bump, mensagens de sanções, starboard e monkeyboard, sugestões, confissões, enquetes, parceiros, pedidos, formulários, mensagens do honeypot, embeds de metas dos contadores, verificação, mensagens de Vanity e Server Tag, alertas de Quests e Rollouts, nomes de threads automáticas, botões com resposta, a mensagem de boas-vindas dos uploads, e cada campo de um [embed](https://wiki.petto.sbs/pt-br/resources/scripting/embeds.md) salvo ou de um [cartão de imagem](https://wiki.petto.sbs/pt-br/resources/image-cards.md).

Alguns textos têm **os seus próprios placeholders curtos** e não usam este resolvedor: nomes de contadores, nomes de canais de tickets e textos de boas-vindas dos tickets, respostas rápidas, horários da equipe de tickets, mensagens de apelação, nomes do VoiceMaster, nomes de threads de sugestões, aliases de comandos e o texto simples das mensagens fixas. Os [Temporizadores](https://wiki.petto.sbs/pt-br/automation/timers.md) enviam o texto como foi escrito. Veja [Placeholders de um recurso](https://wiki.petto.sbs/pt-br/resources/scripting/variables.md#placeholders-de-um-recurso).

Para condições, loops ou dados salvos, use o [Petto Code](https://wiki.petto.sbs/pt-br/automation/petto-code.md), documentado em [code.petto.sbs](https://code.petto.sbs).


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