Skip to main content
Nivel: Intermedio · Etiquetas: WhatsApp, Telegram, Grupos Funcionalidades: conversaciones por participante · scope('group') · menciones (ctx.mentions) · groupMode · comandos con argumentos · triggers de función y contains

Requisitos

  • Node.js 22.12 o superior y una carpeta vacía con "type": "module" en su package.json (Inicio rápido).

El bot completo

Cómo funciona

  1. Valores por defecto en grupos. Todo mensaje del grupo llega al bot, y en un grupo cada participante tiene su propia conversación. ctx.from es el grupo (el chat) y ctx.sender, la persona que escribió.
  2. Un quiz por persona. Ana y Bob pueden ir por la mitad del quiz a la vez: cada respuesta va a la conversación de quien la envía. .scope('group') deja el quiz fuera de los chats privados. { pattern: 'quiz', match: 'contains' } también lo arranca desde @bot quiz, y el id del flujo (quiz) sale de ese patrón. Los puntos se guardan por grupo en un Map.
  3. Comandos para todos. /rules y /scores responden con los datos del grupo en el que se envían.
  4. Comandos solo para administradores. El bot compara ctx.sender con ADMINS. Son los administradores del bot, no los del grupo: botmesh no lee la lista de administradores de un grupo, así que guarda la tuya en la configuración. /id (de slashCommandsPlugin) muestra el id del chat en el que se envía: en privado con el bot es tu id de usuario; en un grupo, el id del grupo.
  5. Menciones. ctx.mentions lista los usuarios que menciona un mensaje, y provider.selfId es el id del propio bot una vez conectado. El catch-all las comprueba y solo ve lo que ningún otro handler tomó, así que @bot quiz sigue arrancando el quiz.
  6. Silencio en grupos. En un grupo el catch-all solo responde a una mención, así que el bot no contesta a cada mensaje del grupo; en privado explica cómo usarlo.

Pruébalo

:as bob Bob cambia a otro miembro del mismo grupo; al bot se le menciona como @bot.

Variante: solo cuando lo mencionan

Para que el bot ignore todo mensaje de grupo que no lo mencione, usa groupMode ('commands' deja pasar solo comandos):
El filtro se aplica a todos los mensajes del grupo, también a las respuestas de una conversación en curso, así que en este modo un jugador tiene que mencionar al bot en cada respuesta, y la mención forma parte del texto de la respuesta. Los comandos también necesitan la mención (/rules @bot; en Telegram, /rules@TuBot cuenta como una):
Por eso este ejemplo deja el groupMode: 'all' por defecto y guarda silencio con un catch-all que solo responde en privado.

Ejecútalo en WhatsApp o Telegram

Pon tu id en ADMINS (envía /id al bot en privado para verlo), arranca el bot con node bot.js, escanea el QR desde WhatsApp → Dispositivos vinculados y añade el número del bot a un grupo. En Telegram, instala @botmesh/telegram, cambia el provider como en O conectar Telegram y añade el bot a un grupo. Con el modo de privacidad por defecto de BotFather, un bot de Telegram solo recibe en grupos los comandos, las menciones y las respuestas a sus propios mensajes; desactívalo (/setprivacy) para que le lleguen las respuestas del quiz.

Siguientes pasos