Você configurou um comando de barra para um bot no seu servidor do Discord, mas quando o bot responde, você e seus membros não recebem nenhuma notificação. Isso acontece mesmo quando a resposta do bot contém um ping, uma menção @ ou uma mensagem que normalmente dispararia uma notificação push. A causa está na forma como o Discord lida com interações de comandos de barra em comparação com mensagens regulares. Este artigo explica o motivo técnico por trás desse comportamento, como contorná-lo e quais limitações você deve aceitar.
Principais Conclusões: Comportamento de Notificação de Comandos de Barra
- Callback de Interação vs Mensagem Regular: As respostas do bot a comandos de barra são callbacks de interação, não mensagens padrão, então elas ignoram os gatilhos de notificação.
- Menção @ em resposta de barra não notifica: Mesmo que o bot inclua um @usuário ou @everyone em uma resposta de comando de barra, o Discord suprime a notificação.
- Use mensagens de acompanhamento para notificações: Os bots podem enviar uma mensagem de acompanhamento separada via webhook ou channel.send para acionar as regras normais de notificação.
Por que o Discord suprime notificações para respostas de comandos de barra
O Discord trata interações de comandos de barra de forma diferente das mensagens de chat regulares. Quando um usuário digita um comando de barra, o bot recebe um objeto Interaction e deve responder dentro de uma janela de três segundos usando uma Interaction Response. Essa resposta não é armazenada como uma mensagem padrão no histórico do canal. Em vez disso, ela é renderizada como uma resposta especial efêmera ou persistente que está vinculada à invocação do comando.
Como a resposta do bot é um callback de interação, o Discord não a avalia para gatilhos de notificação. A plataforma intencionalmente ignora qualquer @menção, @everyone, @here ou menção de cargo contida na resposta. Esse design evita spam e abuso. Se os bots pudessem acionar notificações por meio de comandos de barra, um bot malicioso poderia marcar milhares de usuários a cada uso do comando. O Discord optou por desabilitar todos os efeitos de notificação para callbacks de interação para manter a segurança do servidor.
A mesma regra se aplica a respostas efêmeras (visíveis apenas para o usuário do comando) e respostas de canal (visíveis para todos). Nenhum dos tipos gera notificação push ou alerta de desktop. A única exceção é o reconhecimento inicial da interação, que não contém nenhum conteúdo de mensagem.
Como funciona o ciclo de vida da interação do Discord
Entender o ciclo de vida da interação esclarece por que as notificações estão ausentes. Quando um usuário envia um comando de barra:
- O Discord envia uma Interaction para o bot com o tipo
APPLICATION_COMMAND. - O bot deve responder dentro de três segundos com uma Interaction Response (tipo
CHANNEL_MESSAGE_WITH_SOURCEouDEFERRED_CHANNEL_MESSAGE_WITH_SOURCE). - Se o bot usar
DEFERRED, ele tem até 15 minutos para enviar uma mensagem de acompanhamento via API de Followup Message.
Apenas a resposta inicial e as mensagens de acompanhamento enviadas como mensagens regulares de canal (não callbacks de interação) podem acionar notificações. A resposta inicial é sempre um callback de interação e nunca aciona notificações. Mensagens de acompanhamento enviadas via webhook ou método channel.send podem acionar notificações se contiverem uma @menção.
Passos para fazer uma resposta de bot de comando de barra acionar uma notificação
Você não pode forçar a resposta inicial do comando de barra a acionar uma notificação. No entanto, você pode projetar seu bot para enviar uma mensagem de acompanhamento separada que se comporte como uma mensagem regular. Os passos a seguir funcionam para qualquer bot escrito em discord.py, discord.js ou bibliotecas semelhantes.
- Adie a resposta inicial
No seu manipulador de comando de barra, chameawait interaction.response.defer()(discord.py) ouinteraction.deferReply()(discord.js). Isso envia um reconhecimento ao Discord e dá ao seu bot até 15 minutos para responder. A resposta adiada em si é invisível para os usuários e não aciona nenhuma notificação. - Envie uma mensagem de acompanhamento como mensagem regular de canal
Após adiar, useawait interaction.followup.send(content, ephemeral=False)no discord.py ouinteraction.followUp(content)no discord.js. Isso envia uma mensagem que aparece no canal como uma mensagem normal do bot, não um callback de interação. Inclua sua @menção na stringcontent. - Teste a notificação
Peça a um membro do servidor para executar o comando de barra. Eles devem receber uma notificação push em seu dispositivo móvel ou um alerta de desktop se tiverem notificações habilitadas para @menções. Observe que a notificação mostrará o nome do bot e o conteúdo da mensagem de acompanhamento, não o comando de barra original. - Use um webhook separado para mais controle
Se você precisar que a notificação apareça de um usuário específico ou com um avatar personalizado, crie um webhook no canal e envie a mensagem viawebhook.send(content, username, avatar_url). No discord.py, useawait channel.create_webhook(name='Bot')e depoisawait webhook.send(content). Este método também aciona notificações com base em @menções.
Importante: Mensagens de acompanhamento ainda são notificações
Mesmo com uma mensagem de acompanhamento, o comportamento de notificação não é idêntico ao de um usuário digitando. A mensagem de acompanhamento é enviada pelo bot, e as configurações de notificação do Discord para bots se aplicam. Se um usuário silenciou o bot ou desativou notificações para mensagens de bot, ele não verá o alerta. Além disso, a mensagem de acompanhamento aparece como uma mensagem separada no canal, não como parte do thread de resposta do comando de barra.
Se o Discord ainda suprime notificações após a correção principal
O bot não tem a permissão Send Messages no canal
Se o bot não tiver a permissão Send Messages no canal específico, a mensagem de acompanhamento falhará silenciosamente ou retornará um erro de API. Verifique as permissões do cargo do bot em Configurações do Servidor > Cargos > [Cargo do Bot] > Permissões. Certifique-se de que Send Messages esteja habilitado. Verifique também se as substituições de permissão do canal não negam Send Messages ao cargo do bot.
Notificações desativadas para o bot nas configurações do usuário
Cada usuário pode silenciar notificações de bots específicos. Vá para Configurações do Usuário > Notificações > Configurações de Notificação do Servidor. Selecione o servidor e encontre o bot em Canais e Cargos Silenciados. Se o cargo do bot estiver silenciado, o usuário não receberá nenhuma notificação desse bot. Instrua os usuários a desmutar o cargo do bot se quiserem ver alertas.
A @menção está dentro de um embed ou bloco de código
O Discord não aciona notificações para @menções que estão dentro de embeds (blocos de conteúdo rico) ou blocos de código (texto cercado por crases). Coloque a @menção no campo de texto simples content da mensagem, não dentro do description ou fields de um embed. Se você usar um embed, adicione a @menção no parâmetro content do método send.
Usuário com modo Não Perturbe ativado
Se um usuário definiu seu status online como Não Perturbe, todas as notificações push são suprimidas. Esta é uma configuração do lado do cliente e não pode ser substituída por nenhum bot. O usuário deve mudar seu status para Online, Ausente ou Invisível para receber notificações.
Tipos de resposta de comando de barra: Callback de interação vs Mensagem de acompanhamento
| Item | Callback de Interação (Resposta Inicial) | Mensagem de Acompanhamento (via webhook ou channel.send) |
|---|---|---|
| Gatilho de notificação | Nunca aciona notificações, mesmo com @menções | Aciona notificações se @menção estiver presente e as configurações do usuário permitirem |
| Visibilidade | Visível para todos os usuários no canal (ou efêmera para um usuário) | Visível para todos os usuários no canal |
| Pode ser editada | Sim, usando interaction.edit_original_response() |
Sim, usando webhook.edit_message() ou channel.fetch_message() |
| Limite de taxa | Uma resposta por interação dentro de 3 segundos | Até 5 mensagens por 5 segundos por webhook |
| Suporte a efêmero | Sim, defina ephemeral=True |
Não, mensagens de acompanhamento são sempre visíveis para todos |
Agora você entende por que o Discord suprime notificações em respostas de bots a comandos de barra e como contornar essa limitação usando mensagens de acompanhamento. Para implementar isso, modifique o manipulador de comando de barra do seu bot para adiar a resposta inicial e depois enviar uma mensagem de acompanhamento contendo a @menção. Para casos de uso avançados, considere usar um webhook dedicado para enviar a mensagem de notificação com marca personalizada. Lembre-se de que os usuários devem ter notificações habilitadas para o cargo do bot em suas configurações pessoais, e a @menção deve estar em texto simples fora de qualquer embed ou bloco de código.