Estoy luchando por entender dónde me he equivocado aquí, así que estoy buscando algunos ojos adicionales. Estoy usando Telegraf para hacer un bot de Telegram en NodeJS. Cuando un nuevo usuario inicia sesión, debería restringir que pueda publicar cualquier cosa hasta que responda una pregunta simple de estilo Captcha. Suponiendo que respondan correctamente, se les debe otorgar la capacidad de publicar nuevamente. Si responde incorrectamente, es expulsado del grupo.
Todo parece encajar, excepto la parte en la que se le devuelve al usuario la capacidad de publicar después de responder correctamente. Tengo entendido que restrictChatMember se puede pasar como "verdadero" para los permisos que desea permitir, pero no funciona. ¿Qué más me estoy perdiendo?
bot.on('new_chat_members', (ctx) => { newMember = ctx.message.new_chat_members[0].id; newMemberName = ctx.message.new_chat_members[0].first_name; bot.telegram.restrictChatMember(ctx.chat.id, newMember); const keyboard = Keyboard.make([ Key.callback('Answer1', 'Fail'), Key.callback('Answer2', 'Fail'), Key.callback('Answer3', 'Pass'), Key.callback('Answer4', 'Fail'), Key.callback('Answer5', 'Fail'), ]).inline(); bot.telegram.sendMessage(ctx.chat.id, `Hello, ${newMemberName}!\nYou can post once You select Answer3`, keyboard).then( ({ message_id }) => { spamBlocker = message_id; }); }); bot.on("callback_query", function(callbackQuery) { let chatID = callbackQuery.update.callback_query.message.chat.id; if (callbackQuery.update.callback_query.data == "Pass") { bot.telegram.deleteMessage(chatID, spamBlocker); bot.telegram.restrictChatMember(chatID, newMember, [true, true, true, true]); bot.telegram.sendMessage(chatID, `${newMemberName}, ${welcomeMessage}`) } else { bot.telegram.kickChatMember(chatID, newMember); bot.telegram.deleteMessage(chatID, spamBlocker); } });Gracias a la ayuda de un amable extraño en CodingHelp Discord, pude llegar a la siguiente solución. El problema es que restrictChatMember toma una ID de chat, una ID de miembro y un objeto. El objeto toma pares de claves (obvio a posteriori), así que le dices "can_send_messages": verdadero, por ejemplo, y continúa con cada línea.
En mi caso, cambie esta línea:
bot.telegram.restrictChatMember(chatID, newMember, [true, true, true, true]);a esto:
bot.telegram.restrictChatMember(chatID, newMember, {"can_send_messages": true, "can_send_media_messages": true, "can_send_other_messages": true, "can_add_web_page_previews": true});