Quando um bot do Discord exibe um embed com timestamp no rodapé, você espera uma data e hora legíveis como “Postado há 2 horas” ou “15 de janeiro de 2025”. Em vez disso, pode ver um número bruto de época Unix como 1705324800 ou uma string ISO 8601 como 2025-01-15T14:30:00.000Z. Esse problema ocorre porque o código do bot passa um formato de timestamp não suportado para o campo de rodapé do embed. A API de embed do Discord aceita apenas timestamps Unix em segundos, não milissegundos ou strings ISO. Este artigo explica a causa raiz do formato errado de timestamp e fornece correções passo a passo para desenvolvedores de bots e administradores de servidores.
Principais Conclusões: Corrigindo Timestamps no Rodapé de Embed do Bot Discord
- Timestamp Unix em segundos: O rodapé do embed do Discord exige um timestamp Unix medido em segundos, não em milissegundos ou strings ISO 8601.
- discord.js
Math.floor(Date.now() / 1000): ConvertaDate.now()do JavaScript (milissegundos) para segundos dividindo por 1000 e arredondando para baixo. - Portal do Desenvolvedor Discord > Bot > Intents de Gateway Privilegiados: Verifique se o bot tem o intent
MESSAGE_CONTENTativado se a formatação dinâmica de timestamp for necessária.
Por que os Rodapés de Embed do Bot Discord Mostram Timestamps Errados
A API de embed do Discord espera estritamente que os timestamps no rodapé sejam timestamps de época Unix expressos em segundos inteiros. Um timestamp Unix é o número de segundos que se passaram desde 1º de janeiro de 1970 00:00:00 UTC. Quando um bot envia um timestamp em qualquer outro formato, o Discord não consegue analisá-lo corretamente. O embed pode exibir o número bruto, mostrar uma data incorreta ou gerar um erro.
Formatos de Timestamp Incorretos Comuns
Os três erros mais frequentes que desenvolvedores de bots cometem são:
- Milissegundos de
Date.now(): ODate.now()do JavaScript retorna milissegundos. Passar esse valor diretamente para o rodapé do embed resulta em um timestamp 1000 vezes maior que o esperado. - Strings ISO 8601: Strings como
2025-01-15T14:30:00Znão são aceitas pelo campo de rodapé do embed. O Discord processa apenas timestamps Unix numéricos. - Timestamps Unix com decimais: Valores de ponto flutuante como
1705324800.123fazem o Discord truncar ou exibir a parte decimal.
Como o Discord Processa o Timestamp do Rodapé
Quando você define a propriedade timestamp em um objeto embed, o Discord espera um inteiro representando segundos desde a época. Se você fornecer uma string, o Discord tenta analisá-la, mas muitas vezes falha silenciosamente. O embed pode omitir o timestamp ou mostrar a string bruta. Se você fornecer um número fora do intervalo válido (por exemplo, um valor em milissegundos), o Discord pode mostrar uma data muito no futuro ou no passado.
Passos para Corrigir o Timestamp Errado em Embeds do Bot Discord
Os passos a seguir assumem que você tem acesso ao código-fonte do bot e pode modificar a lógica de criação do embed. Se você é um administrador de servidor pedindo a um desenvolvedor de bot para corrigir o problema, compartilhe estas instruções.
- Identifique onde o timestamp do rodapé do embed é definido
Localize o código que cria o objeto embed. Procure por uma linha semelhante afooter: { text: 'Algum texto', icon_url: 'url' }ousetFooter({ text: 'Algum texto', icon_url: 'url' }). O timestamp geralmente é definido separadamente comsetTimestamp()ou a propriedadetimestamp. - Converta milissegundos para segundos se estiver usando
Date.now()
Se o código passarDate.now()diretamente, substitua porMath.floor(Date.now() / 1000). Isso divide o valor em milissegundos por 1000 e arredonda para baixo para um número inteiro de segundos. - Substitua strings ISO 8601 por timestamps Unix numéricos
Se o timestamp for uma string comonew Date().toISOString(), mude paraMath.floor(new Date().getTime() / 1000). O métodogetTime()retorna milissegundos, então você deve dividir por 1000. - Remova decimais de ponto flutuante
Certifique-se de que o valor do timestamp seja um inteiro. UseMath.floor()ouparseInt()para remover qualquer parte decimal. Por exemplo:const unixSeconds = Math.floor(someFloatValue). - Teste o embed em um canal privado
Execute o bot e envie o embed para um canal de teste. Verifique se o rodapé mostra uma data legível como “15/01/2025” ou um tempo relativo como “há 2 horas”, dependendo das configurações do usuário. - Verifique os intents de gateway privilegiados do bot
Se o bot usar formatação dinâmica de timestamp (por exemplo,<t:1705324800:R>), ele deve ter o intentMESSAGE_CONTENTativado. Acesse o Portal do Desenvolvedor Discord, selecione seu bot, vá em Bot > Intents de Gateway Privilegiados e ative o Intent de Conteúdo de Mensagem.
Se o Discord Ainda Mostrar o Timestamp Errado Após a Correção
Rodapé do embed mostra “Data Inválida” ou um número longo
Isso geralmente significa que o valor do timestamp ainda não é um timestamp Unix em segundos. Verifique novamente se você não está usando new Date() diretamente (que retorna um objeto Date) ou uma string. Converta o valor para um número com Number() ou parseInt() antes de passá-lo para o embed.
O embed do bot usa setTimestamp() mas mostra o fuso horário errado
O Discord converte automaticamente timestamps Unix para o fuso horário local do usuário. Se o timestamp parecer estar com horas de diferença, o timestamp Unix original pode estar em um fuso horário não UTC. Certifique-se de que o timestamp seja gerado em UTC. Use Date.UTC() para criar o timestamp ou converta uma hora local para UTC antes de dividir por 1000.
Biblioteca de bot de terceiros adiciona milissegundos automaticamente
Algumas bibliotecas de bot Discord (como discord.py ou JDA) convertem automaticamente objetos datetime para timestamps Unix. Verifique a documentação da biblioteca para ver se ela espera milissegundos ou segundos. Para discord.py, use int(datetime.timestamp()) para obter segundos. Para JDA, use Instant.now().getEpochSecond().
Formatos de Timestamp do Bot Discord: Unix Segundos vs Outros Formatos
| Item | Unix Segundos (Correto) | Formato Incorreto |
|---|---|---|
| Exemplo de valor | 1705324800 | 1705324800000 ou “2025-01-15T14:30:00Z” |
| Fonte em JavaScript | Math.floor(Date.now() / 1000) |
Date.now() ou new Date().toISOString() |
| Exibição no Discord | Data/hora local do usuário ou tempo relativo | Número bruto ou “Data Inválida” |
| Funciona com formatação dinâmica | Sim, com <t:1705324800:R> |
Não |
O formato correto é sempre um número inteiro representando segundos desde a época Unix. Todos os outros formatos causam erros de exibição. Em caso de dúvida, use Math.floor(Date.now() / 1000) em JavaScript ou o equivalente na sua linguagem.
Agora você pode identificar e corrigir o formato errado de timestamp no rodapé de embed do bot Discord. Comece convertendo valores em milissegundos ou ISO 8601 para segundos Unix usando a divisão com Math.floor(). Para controle avançado, use a formatação dinâmica de timestamp do Discord com a sintaxe <t:unix_seconds:style> para mostrar tempo relativo, data curta ou data longa. Sempre teste o embed em um canal privado antes de implantar a correção em produção.