Skip to content

Instantly share code, notes, and snippets.

@callmeloureiro
Last active January 15, 2024 20:44
Show Gist options
  • Save callmeloureiro/4c74d60f051ed59650cc76d1da0d32da to your computer and use it in GitHub Desktop.
Save callmeloureiro/4c74d60f051ed59650cc76d1da0d32da to your computer and use it in GitHub Desktop.
Como fazer alguém te responder no whatsapp
/*
Hoje iremos MUDAR a vida da pessoa que não te responde no whatsappp...
Que tal enviar mensagens pra ela até obter uma resposta?!
Sensacional não acha?! Mas, somos devs, correto?! Então vamos automatizar esse paranauê!
Para utilizar:
- Abra o web.whatsapp.com;
- Selecione a conversa que você quer;
- Abra o console e cole o código que está no gist;
- Aguarde e verá uma mensagem sendo enviada a cada segundo até obter uma mensagem de retorno ou atingir o limite de mensagens.
Use com responsabilidade e moderação... O intuito é arrancar um riso ;)
*/
var counter = 0;
// Limite de mensagens
// Se quiser enviar sem limites da zueira (porque the zuera never ends), basta modificar o valor para 0.
var limit = 100;
// Mensagem que será enviada
var textToSend = "Me responde!";
var i = setInterval(function() {
window.InputEvent = window.Event || window.InputEvent;
var d = new Date();
var event = new InputEvent('input', {
bubbles: true
});
var textbox = document.querySelector('#main > footer > div.block-compose > div.input-container > div.pluggable-input.pluggable-input-compose > div.pluggable-input-body.copyable-text.selectable-text');
// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço.
if ( counter > 0 ) {
var lastMessage = document.querySelector('#main > .pane-body > .copyable-area > .pane-chat-msgs .msg:last-child > .message');
if ( lastMessage.classList.contains('message-in') ) {
textToSend = "Finalmente respondeu!";
clearInterval(i);
}
}
textbox.textContent = textToSend;
textbox.dispatchEvent(event);
document.querySelector("button.compose-btn-send").click();
counter++;
if (counter === limit && limit !== 0)
clearInterval(i);
console.log("Já enviei " + counter + ' mensagens.')
}, 1000); // 1000 = 1 segundo, tempo que será enviada cada mensagem.
@gabrielbiga
Copy link

@mathloureiro peguei a parte do envio de msgs que você fez, adicionei uns eventos pra lidar com as respostas nesse framework aqui: https://github.com/gabrielbiga/ZapBot. Implementei uns bots pra brincar com a galera aqui e ficou muito irado! (pasta examples). Agora com esse FW da pra fazer um bot completo com envio e recebimento de msgs... Deixei os créditos pra você e a galera aqui do Gist.

@callmeloureiro
Copy link
Author

opa @gabrielbiga! Sensacional hein! O crédito é todo nosso ;)

@JulyanoF
Copy link

galera, tô tentando achar uma forma de mandar imagem, alguem conseguiu?

tentei usar o código acima (do @markinbap) e colocar imagem em base64 no lugar do texto mas não rolou :(

@omurilo
Copy link

omurilo commented Oct 20, 2017

OIha o @JulyanoF querendo enviar o negão do wpp pra todo mundo.

@JulyanoF
Copy link

@murilokaos nem, querendo mandar um middlefinger mesmo hahaha
mas galera, eu consegui implementar com mention aqui:

var counter = 0;

var limit = 1;

//embaixo você seta o número que está cadastrado no whatsapp da pessoa - para validar, eu fui no próprio whatsapp web, usei o mention (sem mandar a mensagem) e inspecionei (formato de número padrão: País + DDD + número: 554199999999)
var textToSend = 'Mensagem normal usando mention do <span data-mention-jid="554199999999@c.us" contenteditable="false"><span class="at-symbol">@</span><span dir="ltr"></span></span> aqui';

var i = setInterval(function() {
	window.InputEvent = window.Event || window.InputEvent;
	var d = new Date();
	var event = new InputEvent('input', {
		bubbles: true
	});
	var textbox = document.querySelector('#main > footer > div.block-compose > div.input-container > div.pluggable-input.pluggable-input-compose > div.pluggable-input-body.copyable-text.selectable-text');
	
	// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
	if ( counter > 0 ) {
		var lastMessage = document.querySelector('#main > .pane-body > .copyable-area > .pane-chat-msgs .msg:last-child > .message');

		if ( lastMessage.classList.contains('message-in') ) {
			textToSend = "Mensagem caso respondam!";
			clearInterval(i);
		}
	}
	// Aqui mudei para innerHTML
	textbox.innerHTML = textToSend;
	// textbox.textContent = textToSend;
	textbox.dispatchEvent(event);
	document.querySelector("button.compose-btn-send").click();
	counter++;

	if (counter === limit && limit !== 0)
		clearInterval(i);

	console.log("Já enviei " + counter + ' mensagens.')

}, 1000);

@JulyanoF
Copy link

JulyanoF commented Oct 23, 2017

Implementei mais uma coisinha aqui: hahahaha só parar quando a pessoa dizer o que você quer:

var counter = 0;

var limit = 0;

var textToSend = 'Diga MEU MESTRE para eu parar :)';

var i = setInterval(function() {
	window.InputEvent = window.Event || window.InputEvent;
	var d = new Date();
	var event = new InputEvent('input', {
		bubbles: true
	});
	var textbox = document.querySelector('#main > footer > div.block-compose > div.input-container > div.pluggable-input.pluggable-input-compose > div.pluggable-input-body.copyable-text.selectable-text');
	// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
	if ( counter > 0 ) {
		var lastMessage = document.querySelector('#main > .pane-body > .copyable-area > .pane-chat-msgs .msg:last-child > .message');

		if ( lastMessage.classList.contains('message-in') ) {
                        // Aqui eu valido se a última mensagem é a esperada :)
			if(document.querySelector("#main > .pane-body > .copyable-area > .pane-chat-msgs .msg:last-child > .message .bubble-text .message-text span").textContent == 'MEU MESTRE'){
				textToSend = "Eu sei que sou seu mestre, hahaha!";
				clearInterval(i);
			}
		}
	}
	// Aqui mudei para innerHTML
	textbox.innerHTML = textToSend;
	// textbox.textContent = textToSend;
	textbox.dispatchEvent(event);
	document.querySelector("button.compose-btn-send").click();
	counter++;

	if (counter === limit && limit !== 0)
		clearInterval(i);

	console.log("Já enviei " + counter + ' mensagens.')

}, 1000);

@andreladocruz
Copy link

Rindo rios aqui com isso... sensacional!!!!! =)

@avitorio
Copy link

avitorio commented Nov 5, 2017

@JulianoF Conseguiu enviar imagem? Já tentei aqui e nada...

@callmeloureiro
Copy link
Author

@avitorio HUMMMM, challenge accepted

@simonardejr
Copy link

alguém já conseguiu mandar imagens?? também tentei aqui e nada xD

@JulyanoF
Copy link

@avitorio @simonardejr nada :/ @mathloureiro hahah eaí?

@Anpix
Copy link

Anpix commented Feb 1, 2018

// Atualização 31/01/2018

var counter = 0;

var limit = 0;

var textToSend = 'Diga MEU MESTRE para eu parar :)';

var i = setInterval(function() {
	window.InputEvent = window.Event || window.InputEvent;
	var d = new Date();
	var event = new InputEvent('input', {
		bubbles: true
	});
	var textbox = document.querySelector('#main > footer > div.block-compose > div.input-container > div.pluggable-input.pluggable-input-compose > div.pluggable-input-body.copyable-text.selectable-text');
	// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
	if ( counter > 0 ) {
		var lastMessage = document.querySelector('.copyable-area > .pane-chat-msgs .msg:last-child > .message');
		if ( lastMessage.classList.contains('message-in') ) {
			// Aqui eu valido se a última mensagem é a esperada :)
			if(document.querySelector(".msg:last-child .message > div > div > .copyable-text > div > span").textContent == 'RAFA, MEU MESTRE'){
				textToSend = "Eu sei que sou seu mestre, hahaha!";
				clearInterval(i);
			}
		}
	}
	// Aqui mudei para innerHTML
	textbox.innerHTML = textToSend;
	// textbox.textContent = textToSend;
	textbox.dispatchEvent(event);
	document.querySelector("button.compose-btn-send").click();
	counter++;

	if (counter === limit && limit !== 0)
		clearInterval(i);

	console.log("Já enviei " + counter + ' mensagens.');
}, 1000);

@AtilioA
Copy link

AtilioA commented Mar 9, 2018

É, não deve estar funcionando mais

@bergpb
Copy link

bergpb commented Mar 12, 2018

estou encontrando o seguinte erro ao jogar o código no console:
Uncaught TypeError: Cannot set property 'textContent' of null
at :40:22

Alguém mais com o mesmo problema?

@Rodrigojs12
Copy link

Sim!
Estou com msm error.

@bvodola
Copy link

bvodola commented Mar 17, 2018

send = function(msg) {
  var textbox = document.querySelector('._2S1VP')
  var textToSend = msg
  textbox.textContent = textToSend;
  var event = new InputEvent('input', {
      bubbles: true
    });
  textbox.dispatchEvent(event);
  document.querySelector("button._2lkdt").click();
}

// send('hi');

@douglashsilva
Copy link

Gostei muito da ideia, fiz um update funcional, Vlw Galera ;)

const WhatsApp = (parameters) => {
	var start = parameters.messageStart,
		stop  = parameters.messageStop,
		time  = parameters.messageTime,
		limit = parameters.messageLimit,
		counter = 0;
	var textToSend = start;
	let interval = setInterval(() => {
		window.InputEvent = window.Event || window.InputEvent;
		let date = new Date();
		let event = new InputEvent("input",{ bubbles: true });
		let textBox = document.querySelector("._2S1VP");
		if(counter > 0){
			if(document.querySelector("#main > div:nth-child(3) > div:nth-child(2) > div:nth-child(3) > div:nth-child(2) > div:last-child > div:nth-child(2)") != null){
				if (document.querySelector("#main > div:nth-child(3) > div:nth-child(2) > div:nth-child(3) > div:nth-child(2) > div:last-child > div:nth-child(2)").classList.contains("message-in")){
					textToSend = stop;
					clearInterval(interval);
				}
			}
			if(document.querySelector("#main > div:nth-child(3) > div:nth-child(2) > div:nth-child(3) > div:nth-child(3) > div:last-child > div:nth-child(2)") != null){
				if (document.querySelector("#main > div:nth-child(3) > div:nth-child(2) > div:nth-child(3) > div:nth-child(3) > div:last-child > div:nth-child(2)").classList.contains("message-in")){
					textToSend = stop;
					clearInterval(interval);
				}
			}
		}
		textBox.textContent = textToSend;
		textBox.dispatchEvent(event);
		document.querySelector("button._2lkdt").click();
		counter++;
	if (counter === limit && limit !== 0)
		clearInterval(interval);
		console.log("Já enviei " + counter + " mensagens.")
	}, time);
}
WhatsApp({
  messageStart: "Me Responde!",
  messageStop: "Obrigado por me responder!",
  messageTime: 1000,
  messageLimit: 100
});

@FusRoDah061
Copy link

Não deixe essa pérola morrer. Funcionando em 12/04/18

var counter = 0;

// Limite de mensagens
// Se quiser enviar sem limites da zueira (porque the zuera never ends), basta modificar o valor para 0. 
var limit = 100;

// Mensagem que será enviada 
var textToSend = "Me responde!";

var i = setInterval(function() {
	
	// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
	if ( counter > 0 ) {
		var lastMessage = document.querySelector('#main ._3zJZ2 .copyable-area ._2nmDZ ._9tCEa .vW7d1:last-child  ._3_7SH');

		if ( lastMessage.classList.contains('message-in') ) {
			textToSend = "Finalmente respondeu!";
			clearInterval(i);
		}
	}

	var textbox = document.querySelector('._2S1VP');
	textbox.textContent = textToSend;
	var event = new InputEvent('input', {
	  bubbles: true
	});
	textbox.dispatchEvent(event);
	document.querySelector("button._2lkdt").click();
	
	counter++;

	if (counter === limit && limit !== 0)
		clearInterval(i);

	console.log("Já enviei " + counter + ' mensagens.')

}, 1000); // 1000 = 1 segundo, tempo que será enviada cada mensagem. 

@JGAndrey
Copy link

olá boa tarde Gostaria de saber como faz para rodar o zap bot? pois nao conseguir
Quero usar ela pra responder mensagem automática no whatzaap da empresa na qual eu trabalho.

@viniceosm
Copy link

@wagstalos
Copy link

att 22/11/18

var counter = 0;

// Limite de mensagens
// Se quiser enviar sem limites da zueira (porque the zuera never ends), basta modificar o valor para 0.
var limit = 100;

// Mensagem que será enviada
var textToSend = "Me responde!";

var i = setInterval(function() {

// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
if ( counter > 0 ) {
	var lastMessage = document.querySelector('#main ._3zJZ2 .copyable-area ._2nmDZ ._9tCEa .vW7d1:last-child  ._3_7SH');

	if ( lastMessage.classList.contains('message-in') ) {
		textToSend = "Finalmente respondeu!";
		clearInterval(i);
	}
}

var textbox = document.querySelector('._2S1VP');
textbox.textContent = textToSend;
var event = new InputEvent('input', {
  bubbles: true
});
textbox.dispatchEvent(event);
document.querySelector("button._35EW6").click();

counter++;

if (counter === limit && limit !== 0)
	clearInterval(i);

console.log("Já enviei " + counter + ' mensagens.')

}, 1000); // 1000 = 1 segundo, tempo que será enviada cada mensagem.

@JulyanoF
Copy link

att 22/11/18

var counter = 0;

// Limite de mensagens
// Se quiser enviar sem limites da zueira (porque the zuera never ends), basta modificar o valor para 0.
var limit = 100;

// Mensagem que será enviada
var textToSend = "Me responde!";

var i = setInterval(function() {

// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
if ( counter > 0 ) {
	var lastMessage = document.querySelector('#main ._3zJZ2 .copyable-area ._2nmDZ ._9tCEa .vW7d1:last-child  ._3_7SH');

	if ( lastMessage.classList.contains('message-in') ) {
		textToSend = "Finalmente respondeu!";
		clearInterval(i);
	}
}

var textbox = document.querySelector('._2S1VP');
textbox.textContent = textToSend;
var event = new InputEvent('input', {
  bubbles: true
});
textbox.dispatchEvent(event);
document.querySelector("button._35EW6").click();

counter++;

if (counter === limit && limit !== 0)
	clearInterval(i);

console.log("Já enviei " + counter + ' mensagens.')

}, 1000); // 1000 = 1 segundo, tempo que será enviada cada mensagem.

boa, funcionando em 10/05/2019

@JulyanoF
Copy link

Só para se responderem o que você quer:

var counter = 0;

// Limite de mensagens
// Se quiser enviar sem limites da zueira (porque the zuera never ends), basta modificar o valor para 0.
var limit = 0;

// Mensagem que será enviada
var textToSend = 'Só paro se mandar '"você manda em mim"';
var textToCompare = "você manda em mim";

var i = setInterval(function() {

// O envio para quando a pessoa responde, caso queira remover, basta apagar essa condiço. 
if ( counter > 0 ) {
	var lastMessage = document.querySelector('#main ._3zJZ2 .copyable-area ._2nmDZ ._9tCEa .vW7d1:last-child  ._3_7SH');

	if ( lastMessage.classList.contains('message-in') ) {
		var mensagemRetorno = document.querySelector('#main ._3zJZ2 .copyable-area ._2nmDZ ._9tCEa .vW7d1:last-child  ._3_7SH .selectable-text').innerText;
		if(mensagemRetorno == textToCompare){
			textToSend = ":-)";
			clearInterval(i);
		}
	}
}

var textbox = document.querySelector('._2S1VP');
textbox.textContent = textToSend;
var event = new InputEvent('input', {
  bubbles: true
});
textbox.dispatchEvent(event);
document.querySelector("button._35EW6").click();

counter++;

if (counter === limit && limit !== 0)
	clearInterval(i);

console.log("Já enviei " + counter + ' mensagens.')
}, 1000); // 1000 = 1 segundo, tempo que será enviada cada mensagem.

@vpsgvitor
Copy link

vpsgvitor commented Jul 26, 2019

Funcionando!

// Limite = 0, manda até o cara dizer "a"
var limit = 100;

//mensagem a ser enviada
var textToSend = 'Fala um "a" pra você ver';

//Palavra chave para parar o envio
var textToCompare = "a";

// Resposta enviada ao acertar a pavra chave
var resposta = "Cara Esperto!";

var counter = 0;
var i = setInterval(function() {
if ( counter > 0 ) {
var lastMessage = document.querySelector('#main ._1_q7u .copyable-area ._1_keJ ._1ays2 .FTBzM:last-child ._1zGQT');
if ( lastMessage.classList.contains('message-in') ) {
var mensagemRetorno = document.querySelector('#main ._1_q7u .copyable-area ._1_keJ ._1ays2 .FTBzM:last-child ._1zGQT .-N6Gq .copyable-text ._12pGw .selectable-text').innerText;
if(mensagemRetorno == textToCompare){
textToSend = resposta;
clearInterval(i);
}
}
}
var textbox = document.querySelector('._3u328');
textbox.textContent = textToSend;
var event = new InputEvent('input', {
bubbles: true
});
textbox.dispatchEvent(event);
document.querySelector("button._3M-N-").click();
counter++;
if (counter === limit && limit !== 0){
clearInterval(i);
}
console.log("Já enviei " + counter + ' mensagens.')

}, 3000);// tempo entre cada mensagem em milisegundos

@carvalholeo
Copy link

Galera, alguém já pensou em modificar para marcar alguém em um grupo? Eu o @encinecarlos estamos com uma missão pra "perturbar" um membro do nosso grupo e isso seria interessante.

Olhando o HTML, não faço a menor ideia de como implementar hehehe... se alguém tiver uma ideia de como fazer, manda aqui ou via DM no Twitter (_carvalho_leo) ou Telegram (@carvalho_leo). Valeuuuuuu

@GuilhermeSalles
Copy link

colo o código aonde?

@JulyanoF
Copy link

Galera, alguém já pensou em modificar para marcar alguém em um grupo? Eu o @encinecarlos estamos com uma missão pra "perturbar" um membro do nosso grupo e isso seria interessante.

Olhando o HTML, não faço a menor ideia de como implementar hehehe... se alguém tiver uma ideia de como fazer, manda aqui ou via DM no Twitter (_carvalho_leo) ou Telegram (@carvalho_leo). Valeuuuuuu

lá para cima tem um exemplo de mention que fiz. funciona até em conversa 1x1

@IltonBJSilva
Copy link

nenhum desses codigos funciona, fica dando Uncaught TypeError: Cannot set property 'textContent' of null

@AlexFushi
Copy link

Nenhum destes códigos estão funcionando, alguém sabe o porque?

@JulyanoF
Copy link

JulyanoF commented Jul 25, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment