ctx.events (setup only)
export async function setup(ctx) {
const off = ctx.events.on("group-participants.update", async (update) => {
if (update.action === "add") {
await ctx.send.to(update.id).text("Bem-vindo! 👋");
}
});
setTimeout(off, 60 * 60 * 1000); // para de ouvir em 1h
await ctx.events.once("connection.update"); // resolve na próxima mudança de conexão
ctx.log.success("Conexão atualizada!");
ctx.events.on("connection.update", (update) => {
if (update.connection === "close") ctx.log.warn("Bot desconectou.");
});
}
on(event, handler) → retorna off(). once(event) → Promise que resolve na próxima
ocorrência, tipada com o payload daquele evento. cleanup() → remove todos os listeners do
plugin (chamado automaticamente pelo kernel ao descarregar).
messages.upsert: o kernel já consome esse evento internamente pra despachar plugins (é a fonte dectx.msg). Ouvirmessages.upsertviactx.events.onte dá acesso ao evento bruto do Baileys, incluindo mensagens de chats fora da lista de permitidos — filtre manualmente se precisar disso, e prefiractx.msgno handler normal em vez de reimplementar a lógica de despacho aqui.
Eventos disponíveis
Esses são os eventos nativos do socket Baileys (sock.ev), repassados via ctx.events:
| Evento | Payload (resumo) | Descrição |
|---|---|---|
connection.update |
{ connection, qr?, lastDisconnect? } |
Conexão mudou (abrindo, qr recebido, fechada). |
creds.update |
credenciais atualizadas | Sessão de auth mudou — o kernel já persiste isso. |
messaging-history.set |
histórico inicial (chats/contatos/mensagens) | Sincronização de histórico ao conectar. |
chats.upsert / chats.update / chats.delete |
Chat[] / updates parciais / IDs |
Chats criados, atualizados ou removidos. |
presence.update |
{ id, presences } |
Presença (online/digitando) de um chat mudou. |
contacts.upsert / contacts.update |
Contact[] / updates parciais |
Contatos criados ou atualizados. |
messages.upsert |
{ messages, type } |
Nova(s) mensagem(ns) — inclui as do próprio bot. ⚠️ veja nota acima. |
messages.update |
updates parciais de mensagem | Status/conteúdo de mensagem mudou. |
messages.delete |
IDs ou { jid, all } |
Mensagem(ns) apagada(s). |
messages.media-update |
updates de mídia | Upload/download de mídia concluído ou falhou. |
messages.reaction |
{ key, reaction }[] |
Reação enviada, atualizada ou removida. |
message-receipt.update |
{ key, receipt }[] |
Confirmação de entrega/leitura. |
groups.upsert / groups.update |
metadados de grupo | Grupo criado ou metadados (nome, descrição, foto) mudaram. |
group-participants.update |
{ id, participants, action } |
Membro entrou, saiu, foi promovido ou removido. action: "add" | "remove" | "promote" | "demote". |
group.join-request |
{ id, participant, action } |
Pedido de entrada em grupo com aprovação obrigatória. |
blocklist.set / blocklist.update |
lista de JIDs bloqueados | Lista de bloqueio carregada ou atualizada. |
call |
{ id, from, status, isVideo }[] |
Chamada recebida, aceita, rejeitada ou encerrada. |
labels.edit / labels.association |
labels do WhatsApp Business | Labels criadas/editadas ou associadas a um chat. |
Payloads exatos vêm de
BaileysEventMap(@whiskeysockets/baileys). O pacote@manybot/typesjá tipactx.events.on/oncesobre esse mapa — ohandlerrecebe o payload correto automaticamente pra qualquer evento nativo do Baileys, sem precisar importar nada extra no seu plugin.