Quando você envia um webhook para o Discord com um embed que contém vários campos, os campos podem aparecer em uma ordem diferente da que você definiu no seu payload JSON. Isso acontece mesmo quando você lista os campos na sequência correta dentro do array fields. A causa raiz é como o Discord processa a propriedade inline em cada objeto de campo. Quando alguns campos são definidos como inline e outros não, o Discord reorganiza os campos para preencher cada linha com base na lógica de agrupamento inline. Este artigo explica por que a ordem muda e como forçar sua sequência pretendida.
Principais conclusões: Ordem dos campos de embed do webhook do Discord
- Defina todos os campos como
inline: falseou todos comoinline: true: Isso força o Discord a respeitar a ordem do array sem reordenamento baseado em linhas. - Remova a propriedade
inlinecompletamente: O Discord trata inline omitido como false, preservando a sequência definida. - Use uma única linha de campos inline com no máximo três por linha: O Discord preenche as linhas da esquerda para a direita; misturar inline e não inline quebra a ordem.
Por que o Discord reordena os campos do embed
O mecanismo de layout de embed do Discord agrupa os campos pela propriedade inline. Quando você define um campo como inline: true, o Discord o coloca em uma linha horizontal junto com outros campos inline. Uma linha pode conter até três campos inline. Campos com inline: false ou o valor padrão ocupam sua própria linha de largura total. Esse agrupamento não respeita o índice do array. Em vez disso, o Discord coleta todos os campos inline de todo o array, renderiza-os em linhas da esquerda para a direita e, em seguida, renderiza os campos não inline abaixo deles na ordem em que aparecem no array. Se você misturar campos inline e não inline, a ordem renderizada não corresponderá à sua definição JSON.
O segundo fator é o comportamento de preenchimento de linha. O Discord tenta equilibrar as linhas para que nenhuma linha tenha menos de três campos, a menos que seja a última linha de campos inline. Se você definir campos inline em uma sequência que deixaria uma linha com apenas um campo, o Discord pode deslocar campos de posições posteriores para preencher a linha anterior. Esse deslocamento altera a ordem visual mesmo entre campos que são todos inline. Por exemplo, um campo definido em quinto no array pode aparecer em segundo no embed porque foi movido para preencher uma linha incompleta.
Como a propriedade inline funciona
A propriedade inline é um booleano que assume o padrão false. Quando definida como true, o campo fica ao lado de outros campos inline na mesma linha. O Discord mede a largura de cada campo inline como aproximadamente um terço da largura do embed. Se você enviar quatro campos inline, o Discord coloca os três primeiros na linha um e o quarto na linha dois sozinho. Esse agrupamento baseado em linhas substitui a ordem do array porque o Discord trata os campos inline como um grupo separado que deve preencher linhas antes que os campos não inline sejam renderizados.
Passos para forçar a ordem correta dos campos
- Defina todos os campos como não inline
Altere cada objeto de campo no seu payload JSON para"inline": falseou remova a propriedadeinlinecompletamente. Isso diz ao Discord para renderizar cada campo em sua própria linha, preservando a ordem do array exatamente como definido. - Se você precisar de campos inline, torne todos eles inline
Defina todos os campos como"inline": true. O Discord então os renderizará linha por linha, da esquerda para a direita, seguindo a ordem do array. No entanto, certifique-se de que o número total de campos seja múltiplo de três para evitar espaços vazios ou reordenação. Por exemplo, use 3, 6 ou 9 campos. - Agrupe campos inline juntos no final do array
Coloque todos os campos inline após todos os campos não inline no seu array JSON. O Discord renderizará os campos não inline em ordem primeiro, depois renderizará os campos inline em linhas. Essa separação impede que a lógica de preenchimento de linhas inline interfira na sequência não inline. - Limite campos inline a três por linha
Se você tiver mais de três campos inline, divida-os em grupos de três e insira campos placeholder vazios com"name": ""e"value": ""e"inline": truepara preencher as linhas. Isso impede que o Discord mova campos entre linhas. - Teste o payload com um testador de webhook
Use uma ferramenta como o testador de webhook do Discord ou um serviço de terceiros como o Discohook para enviar o embed e inspecionar a saída renderizada. Compare a ordem dos campos no JSON com a aparência do embed. Ajuste as configurações de inline até que a ordem corresponda.
Se o Discord ainda mostrar os campos na ordem errada
Campos definidos dentro de um objeto embed aninhado
Se você estiver usando uma biblioteca ou framework que constrói o objeto embed, verifique se a biblioteca não ordena ou reordena o array de campos antes de enviar. Algumas bibliotecas aplicam sua própria lógica de formatação. Verifique o payload JSON bruto que é realmente transmitido. Você pode fazer isso registrando o payload ou usando uma ferramenta de proxy como Wireshark ou Postman.
Nomes de campos inconsistentes causando confusão visual
Se dois campos tiverem nomes idênticos, você pode identificar erroneamente qual campo aparece em qual posição. Use nomes de campo únicos temporariamente para confirmar a ordem. Após verificar, você pode renomeá-los de volta.
Cache de webhook ou limitação de taxa
O Discord armazena em cache as respostas do webhook por um curto período. Se você enviar o mesmo payload várias vezes, a versão em cache pode ser exibida. Aguarde alguns segundos entre os testes ou altere o valor de um campo para forçar uma nova resposta. A limitação de taxa também pode atrasar a exibição do embed atualizado. Verifique o cabeçalho X-RateLimit-Remaining na resposta.
| Item | Todos os campos não inline | Todos os campos inline | Misto inline e não inline |
|---|---|---|---|
| Preservação da ordem | Ordem exata do array | Ordem das linhas, da esquerda para a direita | Campos inline agrupados primeiro, depois não inline |
| Comportamento das linhas | Um campo por linha | Até três campos por linha | Linhas inline preenchem antes das linhas não inline |
| Melhor caso de uso | Listas longas de texto | Pares de dados curtos como estatísticas | Não recomendado |
A ordem dos campos de embed do webhook do Discord é controlada inteiramente pela propriedade inline. Para garantir sua sequência definida, defina todos os campos como não inline ou todos como inline. Se precisar misturar, coloque os campos inline após os campos não inline e limite cada linha a três campos inline. Use um testador de webhook para verificar a saída antes de implantar o webhook em produção.