/** * 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 } } }
$w->eventManager()->bind('onPresenceUnavailable', 'onPresenceUnavailable'); $w->eventManager()->bind('onGetImage', 'onGetImage'); $w->eventManager()->bind('onGetVideo', 'onGetVideo'); $w->eventManager()->bind('onGetAudio', 'onGetAudio'); $w->connect(); try { $w->loginWithPassword($password); } catch (Exception $e) { echo "Error: {$e}"; exit; } echo "\nConnected to WA\n\n"; if ($login == '1') { $w->sendGetClientConfig(); $w->sendGetServerProperties(); $w->sendGetGroups(); $w->sendGetBroadcastLists(); $sql = "UPDATE data SET login=?"; $query = $db->prepare($sql); $query->execute(array('0')); } else { $w->sendGetGroups(); } //$w->sendGetGroupV2Info(); $w->sendGetPrivacyBlockedList(); $w->sendAvailableForChat($nickname); $show = true; global $onlineContacts; $GLOBALS["online_contacts"] = array(); $GLOBALS["current_contact"]; $pn = new ProcessNode($w, $contact);
/** * Return all groups a user belongs too. * * Log into the whatsapp servers and return a list * of all the groups a user participates in. * * @return void */ public function getGroupList() { $this->connectToWhatsApp(); $this->wa->sendGetGroups(); }