Você precisa enviar uma mensagem para um canal do Discord a partir de um backend Rust, mas quer evitar adicionar uma biblioteca de webhook às suas dependências. Isso é comum quando você precisa de uma integração leve, sem inchaço extra, ou quando está construindo uma aplicação de servidor mínima. O problema central é que os webhooks do Discord funcionam por meio de requisições HTTP POST com um payload JSON específico e um cabeçalho personalizado. Este artigo mostra como construir e enviar uma requisição de webhook válida usando apenas a biblioteca padrão do Rust — especificamente os módulos std::net::TcpStream e std::io::Write — para que você possa postar mensagens em qualquer canal do Discord diretamente do seu código Rust.
Webhooks são simples: você envia uma requisição HTTP POST para uma URL única fornecida pelo Discord. A URL inclui um token que autentica sua requisição. Seu código Rust deve construir a requisição HTTP bruta, formatar o corpo JSON e lidar com a resposta. Nenhuma crate externa é necessária, embora você precise de suporte TLS para conexões HTTPS. A biblioteca padrão sozinha não inclui TLS, então este guia usa native-tls ou rustls apenas para a camada TLS, não para a lógica do webhook em si. Alternativamente, você pode usar a crate ureq para HTTPS sem uma biblioteca específica de webhook.
Ao final deste artigo, você será capaz de escrever uma função Rust que envia uma mensagem de webhook do Discord usando apenas std::net::TcpStream e um wrapper TLS. Você também aprenderá a lidar com erros comuns como tokens inválidos, limites de taxa e JSON malformado.