Bot Discord enviando DM automática: como configurar
DMs automáticas são úteis para boas-vindas privadas, confirmação de compras e notificações importantes. Veja como implementar com discord.js e lidar corretamente com erros de DM fechado.
Quando usar DM automática
DMs automáticas são úteis em situações específicas onde uma mensagem privada faz mais sentido do que uma notificação pública:
- Boas-vindas privadas com instruções detalhadas ao entrar no servidor
- Confirmação de compra de cargo VIP ou assinatura
- Notificação de punição (aviso, mute, ban temporário)
- Alerta de evento exclusivo para membros de um grupo específico
- Resultado de formulário ou inscrição submetida
Não use DMs automáticas para fins de marketing ou propaganda sem consentimento. O Discord considera isso spam e pode banir o bot. Use DMs apenas para informações diretamente relacionadas ao servidor e ações do usuário.
Enviar DM com discord.js
No discord.js, você pode enviar DM via um objeto User ou um GuildMember. O método é o mesmo nos dois casos:
// Via GuildMember (dentro de um servidor)
await member.send('Olá! Esta é uma DM automática.');
// Via User (fora do contexto de servidor)
const user = await client.users.fetch('ID_DO_USUARIO');
await user.send('Olá! Esta é uma DM automática.');
Prefira sempre usar member.send() quando estiver dentro do contexto de um servidor. É mais direto e não precisa buscar o usuário separadamente.
DM ao entrar no servidor
Combinando com o evento guildMemberAdd, envie uma DM de boas-vindas privada ao mesmo tempo que a mensagem pública no canal:
client.on('guildMemberAdd', async (member) => {
try {
await member.send(
`Bem-vindo(a) ao servidor, ${member.user.username}!\n` +
'Leia as regras em #regras antes de interagir.\n' +
'Se tiver dúvidas, abra um ticket em #suporte.'
);
} catch (err) {
console.log(`Não foi possível enviar DM para ${member.user.tag}: ${err.message}`);
}
});
DM ao receber um cargo
Para enviar DM quando um membro recebe um cargo específico, escute o eventoguildMemberUpdate:
const ID_CARGO_VIP = '123456789012345678';
client.on('guildMemberUpdate', async (oldMember, newMember) => {
const temCargoNovo = !oldMember.roles.cache.has(ID_CARGO_VIP)
&& newMember.roles.cache.has(ID_CARGO_VIP);
if (!temCargoNovo) return;
try {
await newMember.send('Parabéns! Você agora é VIP no servidor.');
} catch (err) {
console.log('Erro ao enviar DM:', err.message);
}
});
Tratar erros de DM fechado
Muitos usuários desativam DMs de servidores nas configurações de privacidade do Discord. Sem tratamento de erro, o bot vai quebrar (throw) ao tentar enviar. Sempre use try/catch:
try {
await member.send('Mensagem importante');
} catch (err) {
if (err.code === 50007) {
// DM desativada pelo usuário — falha silenciosa é esperada
console.log(`DM fechada para ${member.user.tag}`);
} else {
// Erro inesperado — registre para investigação
console.error('Erro inesperado ao enviar DM:', err);
}
}
O código de erro 50007 significa "Cannot send messages to this user". Trate isso como uma falha esperada e silenciosa, não como um erro crítico do bot.
Para o bot funcionar 24 horas enviando DMs e notificações, ele precisa estar hospedado em produção. Veja como hospedar bot Discord 24/7.
Perguntas frequentes
- O bot pode enviar DM para qualquer usuário no Discord?
- O bot só pode enviar DM para usuários que compartilhem pelo menos um servidor com ele. Além disso, o usuário pode ter as DMs de servidores desativadas nas configurações de privacidade do Discord, o que vai gerar um erro ao tentar enviar.
- Como saber se o usuário tem DM desativada?
- Não é possível verificar antes de tentar. A forma correta é tentar enviar a DM e capturar o erro com try/catch. O código de erro 50007 ('Cannot send messages to this user') indica que o DM está fechado.
- Posso enviar DM em massa para todos os membros do servidor?
- Tecnicamente sim, mas o Discord limita fortemente essa prática. Enviar muitas DMs rapidamente pode levar o bot a ser banido por spam. Nunca envie DMs em massa sem consentimento explícito dos usuários.
- Como enviar embed via DM no Discord?
- A mesma sintaxe de embed que funciona em canais funciona em DMs. Use user.send({ embeds: [embed] }) com um EmbedBuilder configurado. O limite de tamanho de embed se aplica igualmente.
Próximo passo
Ver planos de bots
Bots Discord 24/7 com ativação rápida e suporte em português.
Guias relacionados
Como configurar mensagem de boas-vindas automática no Discord com bot
Mensagem de boas-vindas cria a primeira impressão do servidor. Veja como configurar com bot próprio em Node.js ou com bots prontos, e o que incluir para reter novos membros.
Como criar bot Discord com slash commands
Slash commands melhoram a experiência do usuário e deixam o bot mais fácil de usar. Veja um caminho claro para começar.
Hospedagem de bot Discord 24/7 no Brasil
Hospedagem bot Discord 24/7 combina process manager com restart automático, token fora do código, logs e servidor no Brasil para latência baixa com a API e seus jogadores.