Agendar mensagens automáticas no Discord com bot
Mensagens agendadas são ótimas para anúncios de evento, lembretes de votação e avisos recorrentes. Veja como implementar com node-schedule no bot Node.js e boas práticas de agendamento.
Instalar node-schedule
O node-schedule é a biblioteca mais usada para agendamentos em bots Discord com Node.js. Para instalar no projeto do bot:
npm install node-schedule
E importe no arquivo do bot:
const schedule = require('node-schedule');
Coloque os agendamentos dentro do evento client.once('ready', ...) para garantir que o bot está conectado ao Discord antes de tentar acessar canais e enviar mensagens.
Mensagem em horário específico
Para enviar uma mensagem em uma data e hora específica:
client.once('ready', () => {
const canal = client.channels.cache.get('ID_DO_CANAL');
// Agendar para 25 de dezembro às 00:00 no horário de Brasília
const data = new Date('2026-12-25T00:00:00-03:00');
schedule.scheduleJob(data, () => {
canal.send('Feliz Natal! 🎄');
});
});
O agendamento é cancelado automaticamente após a execução. Para datas passadas, o job não executa.
Mensagem recorrente (diária/semanal)
Use sintaxe cron para agendamentos que se repetem. O formato é:
segundo minuto hora dia-mês mês dia-semana
client.once('ready', () => {
const canal = client.channels.cache.get('ID_DO_CANAL');
// Todo dia às 9h no horário de Brasília
schedule.scheduleJob(
{ rule: '0 9 * * *', tz: 'America/Sao_Paulo' },
() => {
canal.send('Bom dia! Lembre-se de votar no servidor hoje. 🗳️');
}
);
// Toda segunda-feira às 10h
schedule.scheduleJob(
{ rule: '0 10 * * 1', tz: 'America/Sao_Paulo' },
() => {
canal.send('É segunda! Novidades da semana no #anuncios 📢');
}
);
});
0 9 * * *— todo dia às 9h0 12 * * 1— toda segunda-feira ao meio-dia0 0 1 * *— no dia 1 de cada mês à meia-noite*/30 * * * *— a cada 30 minutos
Cancelar agendamentos
Para cancelar um agendamento, guarde a referência do job e chame o método cancel():
const job = schedule.scheduleJob('0 9 * * *', () => {
canal.send('Mensagem diária');
});
// Cancelar quando necessário
job.cancel();
Ao reiniciar o bot, todos os agendamentos em memória são perdidos. Para persistência, salve os dados de agendamento em banco e recarregue os jobs no evento ready.
Boas práticas de agendamento
- Sempre especifique o fuso com
tz: 'America/Sao_Paulo'para evitar surpresas - Verifique se o canal existe antes de enviar:
if (!canal) return; - Use try/catch dentro do callback do job para erros silenciosos não derrubarem o processo
- Evite muitas mensagens automáticas: usuários podem silenciar ou sair do servidor
- Teste o agendamento com um horário próximo antes de colocar em produção
Para o bot funcionar sem interrupções e os agendamentos executarem corretamente, é essencial uma hospedagem estável. Veja como hospedar o bot 24/7 e como configurar o PM2 para manter o processo ativo.
Perguntas frequentes
- Qual biblioteca usar para agendar mensagens no Discord bot?
- node-schedule é a mais usada para bots Discord em Node.js. Ela suporta tanto horários únicos (Date específica) quanto recorrentes com sintaxe cron. node-cron é uma alternativa mais simples para quem prefere sintaxe cron pura.
- As mensagens agendadas funcionam se o bot reiniciar?
- Não por padrão. Os agendamentos são feitos em memória e são perdidos quando o processo reinicia. Para agendamentos que precisam sobreviver a reinicializações, salve os dados em banco (SQLite, MongoDB) e recarregue os jobs ao iniciar o bot.
- Posso agendar mensagem para um canal específico?
- Sim. Busque o canal pelo ID com client.channels.cache.get('ID_DO_CANAL') e use channel.send() dentro do callback do agendamento. Certifique-se que o bot tem permissão de Enviar Mensagens no canal.
- Qual o fuso horário padrão do node-schedule?
- Por padrão o node-schedule usa o fuso horário do servidor onde o bot está rodando. Para especificar um fuso fixo, use o parâmetro tz nas opções do agendamento, como tz: 'America/Sao_Paulo' para horário de Brasília.
Próximo passo
Ver planos de bots
Bots Discord 24/7 com ativação rápida e suporte em português.
Guias relacionados
Deploy de bot Discord Node.js com PM2: variáveis de ambiente e restart automático
PM2 é gerenciador de processos Node popular para bots Discord porque reinicia após crash, persiste entre reboots quando combinado com startup hook e centraliza logs mínimos sem montar Kubernetes inteiro. Este guia cobre arquivo ecosystem, env vars para token e integração com hospedagem BR.
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.
Como usar webhook do Discord para alertas de servidor
Webhook no Discord é uma forma rápida de avisar a equipe sobre incidentes, deploy e quedas sem depender de monitoramento manual.