Por que as notificações do Discord não disparam em respostas de bots a comandos de barra
🔍 WiseChecker

Por que as notificações do Discord não disparam em respostas de bots a comandos de barra

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.

ADVERTISEMENT

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_SOURCE ou DEFERRED_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.

  1. Adie a resposta inicial
    No seu manipulador de comando de barra, chame await interaction.response.defer() (discord.py) ou interaction.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.
  2. Envie uma mensagem de acompanhamento como mensagem regular de canal
    Após adiar, use await interaction.followup.send(content, ephemeral=False) no discord.py ou interaction.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 string content.
  3. 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.
  4. 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 via webhook.send(content, username, avatar_url). No discord.py, use await channel.create_webhook(name='Bot') e depois await 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.

ADVERTISEMENT

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.

ADVERTISEMENT