} echo "[] logging in as '{$nickname}' ({$username})\n"; $w = new WhatsProt($username, $nickname, $debug); $w->eventManager()->bind('onPresenceAvailable', 'onPresenceAvailable'); $w->eventManager()->bind('onPresenceUnavailable', 'onPresenceUnavailable'); $w->connect(); // Nos conectamos a la red de WhatsApp $w->loginWithPassword($password); // Iniciamos sesion con nuestra contraseña echo "[*]Conectado a WhatsApp\n\n"; $w->sendGetServerProperties(); // Obtenemos las propiedades del servidor $w->sendClientConfig(); // Enviamos nuestra configuración al servidor $sync = [$target]; $w->sendSync($sync); // Sincronizamos el contacto $w->pollMessage(); // Volvemos a poner en cola mensajes $w->sendPresenceSubscription($target); // Nos suscribimos a la presencia del usuario $pn = new ProcessNode($w, $target); $w->setNewMessageBind($pn); while (1) { $w->pollMessage(); $msgs = $w->getMessages(); foreach ($msgs as $m) { // process inbound messages //print($m->NodeString("") . "\n"); } $line = fgets_u(STDIN);
$mainCmd = fgets_u(STDIN); switch ($mainCmd) { case '/add': echo "\nEnter the number you want to add > "; $numberToAdd = trim(fgets(STDIN)); do { echo "\nIs it right yes/no > "; $check = trim(fgets(STDIN)); if ($check != 'yes') { echo "\nEnter the number you want to add > "; $numberToAdd = trim(fgets(STDIN)); } } while ($check != 'yes'); echo "\nEnter the nickname/name > "; $nickname = trim(fgets(STDIN)); $w->sendSync([$numberToAdd], null, 3); if ($existUser) { $w->sendPresenceSubscription($numberToAdd); addContact($numberToAdd, $nickname); } break; case '/delete': echo "\nEnter the nickname you want to remove > "; $nickname = trim(fgets(STDIN)); do { echo "\nIs it right yes/no > "; $check = trim(fgets(STDIN)); if ($check != 'yes') { echo "\nEnter the nickname you want to remove > "; $nickname = trim(fgets(STDIN)); }
//add leading + $number = "+{$number}"; } $numbers[] = $number; } //event handler /** * @param $result SyncResult */ function onSyncResult($result) { foreach ($result->existing as $number) { echo "{$number} exists<br />"; } foreach ($result->nonExisting as $number) { echo "{$number} does not exist<br />"; } die; //to break out of the while(true) loop } $wa = new WhatsProt($username, "", "WhatsApp", false); //bind event handler $wa->eventManager()->bind('onGetSyncResult', 'onSyncResult'); $wa->connect(); $wa->loginWithPassword($password); //send dataset to server $wa->sendSync($numbers); //wait for response while (true) { $wa->pollMessage(); }
/** * Execute the console command. * * @return mixed */ public function fire() { if (!$this->argument('number')) { return $this->error('No number specified.'); } $number = Number::where('number', $this->argument('number'))->first(); if (is_null($number) || is_null($number->wa_password) || is_null($number->wa_expiration)) { return $this->error('Whatsapp not registered. Run php artisan whatsapp:register'); } $contacts = $number->contacts->map(function ($contact) { return $contact->number; }); $wa = new WhatsProt($number->number, $number->number, true); $wa->connect(); // Connects to WhatsApp $wa->loginWithPassword($number->wa_password); // Login $wa->pollMessage(); $wa->sendGetPrivacyBlockedList(); // Get our privacy list $wa->sendGetClientConfig(); // Get client config $wa->sendGetServerProperties(); // Get server properties if (!$contacts->isEmpty()) { $wa->sendGetHasVoipEnabled($contacts); } // Get which users have voip enabled $wa->sendGetGroups(); // Get groups (participating) $wa->sendGetBroadcastLists(); // Get broadcasts lists // $wa->sendGetProfilePicture(self); // self preview profile picture [OPTIONAL] if (!$contacts->isEmpty()) { $wa->sendSync($contacts); } // Sync all contacts // $wa->sendGetStatuses(All contacts); // Get contacts status [OPTIONAL] /* for (All contacts) [OPTIONAL] { $wa->sendGetProfilePicture(contact); // preview profile picture of every contact } */ // $wa->sendPing(); // Keep alive $wa->eventManager()->bind("onGetMessage", function ($mynumber, $from, $id, $type, $time, $name, $body) { // todo // save message id and compare to avoid duplicate $inbound = new Inbound(); $inbound->from = $this->getFrom($from); $inbound->to = $mynumber; $inbound->text = $body; $inbound->type = 'whatsapp'; $inbound->save(); }); $wa->eventManager()->bind("onPresenceAvailable", function ($mynumber, $from) { $from = $this->getFrom($from); // todo // add or update wa-contact }); $wa->eventManager()->bind("onPresenceUnavailable", function ($mynumber, $from, $last) { $from = $this->getFrom($from); // todo // add or update wa-contact }); $wa->eventManager()->bind("onMessageReceivedClient", function ($mynumber, $from, $id) { $outbound_chunk = OutboundChunk::where('message_id', $id)->first(); if (!$outbound_chunk) { return; } $outbound_chunk->dn_error_code = 0; $outbound_chunk->dn_status = 'delivered'; $outbound_chunk->save(); }); $time = time(); while (true) { sleep(1); $wa->pollMessage(); $this->processMessages($wa); if (time() - $time >= 8) { $wa->sendActiveStatus(); $time = time(); // whatsapp command action $whatsAppAction = Cache::get('whatsAppAction_' . $number->number, false); if ($whatsAppAction) { $whatsAppActionInput = Cache::get('whatsAppActionInput_' . $number->number, false); Cache::forget('whatsAppAction_' . $number->number); Cache::forget('whatsAppActionInput_' . $number->number); switch (strtolower($whatsAppAction)) { case 'updatestatus': $wa->sendStatusUpdate($whatsAppActionInput); break; case 'setprofilepicture': try { $wa->sendSetProfilePicture($whatsAppActionInput); } catch (Exception $e) { } break; case 'stop': $wa->disconnect(); exit('whatsapp is stopped'); } } // end whatsapp command action } } }
$mainCmd = fgets_u(STDIN); switch ($mainCmd) { case '/add': echo "\nEnter the number you want to add > "; $numberToAdd = trim(fgets(STDIN)); do { echo "\nIs it right yes/no > "; $check = trim(fgets(STDIN)); if ($check != 'yes') { echo "\nEnter the number you want to add > "; $numberToAdd = trim(fgets(STDIN)); } } while ($check != 'yes'); echo "\nEnter the nickname/name > "; $nickname = trim(fgets(STDIN)); $w->sendSync(array($numberToAdd), null, 3); if ($existUser) { $w->sendPresenceSubscription($numberToAdd); addContact($numberToAdd, $nickname); } break; case '/delete': echo "\nEnter the nickname you want to remove > "; $nickname = trim(fgets(STDIN)); do { echo "\nIs it right yes/no > "; $check = trim(fgets(STDIN)); if ($check != 'yes') { echo "\nEnter the nickname you want to remove > "; $nickname = trim(fgets(STDIN)); }