Saltar al contenido principal
Nivel: Avanzado · Etiquetas: Plugins, Inyección de dependencias, WhatsApp, Telegram Funcionalidades: Plugins (definePlugin, install/uninstall, ctx.onDispose, unplug) · Inyección de dependencias (provide, ctx.tools) · Comandos slash · Comandos y triggers · Simulador en la terminal

Requisitos previos

Node.js 22.12 o superior y un proyecto ESM ("type": "module"), como en Inicio rápido.

El bot completo

Cómo funciona

1. definePlugin e install

definePlugin(spec) solo tipa el spec: un name, una version y un install(ctx, config) que lo registra todo. install debe ser síncrono (el bot no lo espera). config es el segundo argumento de bot.plug(), así que un mismo plugin sirve a varios bots con respuestas distintas.

2. Compartir una herramienta con provide

ctx.bot.provide('faq', valor) guarda valor en el registro de herramientas del bot. Cualquier handler, hook o plugin lo lee como ctx.tools.faq: el comando /faqstats del propio bot (paso 7) usa los contadores del plugin sin importar nada de él. Mira Inyección de dependencias.

3. Lo que el unplug deshace por ti

Lo registrado a través de ctx.bot (command, when, onMessage, hooks, flujos, plugins anidados) queda anotado y se quita al desconectar el plugin. Por eso horario deja de responder después de /faqoff.

4. Lo que deshaces tú: ctx.onDispose

El unplug no sabe nada de tus temporizadores, conexiones ni de las herramientas que publicaste con provide(). Registra su limpieza con ctx.onDispose(fn). Aquí detiene el log de estadísticas de cada hora y borra ctx.tools.faq, para que /faqstats sepa que el plugin ya no está. report.unref() evita que el temporizador mantenga vivo el proceso.

5. uninstall

uninstall(ctx) corre primero al desconectar, antes del rollback automático y de los callbacks de onDispose: el sitio para volcar o registrar un estado final.

6. Conectar y desconectar

bot.plug(plugin, config) devuelve la función de desconexión (no el bot, así que las llamadas no se encadenan). Llamarla dos veces no hace nada. Conectar un segundo plugin llamado faq lanza un error, salvo que el spec ponga multiple: true.

Transcripción de ejemplo

Capturada con npx botmesh dev bot.js:
Envíos coincide con envios: los triggers de texto comparan el mensaje completo, normalizado (mayúsculas, tildes y espacios de más).

Ejecutarlo en WhatsApp o Telegram

node bot.js se conecta a WhatsApp: escanea el QR con el teléfono que hará de bot. Para Telegram, instala @botmesh/telegram y pasa new TelegramProvider({ token: process.env.TELEGRAM_TOKEN }) en su lugar; el plugin no cambia. Mira Canales.

Siguientes pasos