X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FTwitchBot%2FTwitchBot.php;h=a45de87fcce69a36b32e06cdb2fc567b222144a0;hb=31127000e16c18389129546b9aa652de565683fb;hp=ddc51fe046b2e68d448a18b04cc272ab8702a8c3;hpb=9ac5e263a259207e3ecd132188df41f7c3315b88;p=alttp.git diff --git a/app/TwitchBot/TwitchBot.php b/app/TwitchBot/TwitchBot.php index ddc51fe..a45de87 100644 --- a/app/TwitchBot/TwitchBot.php +++ b/app/TwitchBot/TwitchBot.php @@ -26,6 +26,7 @@ class TwitchBot { $this->connector = new Connector(); $this->connect(); $this->listenCommands(); + $this->startPinger(); } public function getLogger() { @@ -86,8 +87,8 @@ class TwitchBot { $this->ready = false; $this->logger->info('websocket connection closed: '.$reason.' ['.$op.']'); if (!$this->shutting_down) { - $this->logger->info('reconnecting in 10 seconds'); - Loop::addTimer(10, [$this, 'connect']); + $this->logger->info('reconnecting in 5 seconds'); + Loop::addTimer(5, [$this, 'connect']); } } @@ -97,6 +98,7 @@ class TwitchBot { public function handleIRCMessage(IRCMessage $msg) { + $this->last_contact = time(); if ($msg->isPrivMsg()) { $this->handlePrivMsg($msg); return; @@ -105,6 +107,9 @@ class TwitchBot { $this->sendIRCMessage($msg->makePong()); return; } + if ($msg->isPong()) { + return; + } if ($msg->isNotice() && $msg->getText() == 'Login authentication failed') { $this->logger->notice('login failed, refreshing access token'); $this->token->refresh(); @@ -171,13 +176,24 @@ class TwitchBot { } } }); + } + private function startPinger() { + $this->getLoop()->addPeriodicTimer(15, function () { + if (!$this->ready) return; + if (time() - $this->last_contact < 60) return; + try { + $this->sendIRCMessage(IRCMessage::ping()); + } catch (\Exception $e) { + } + }); } public function sendIRCMessage(IRCMessage $msg) { $irc_message = $msg->encode(); $this->logger->info('sending IRC message '.$irc_message); $this->ws->send($irc_message); + $this->last_contact = time(); } @@ -190,6 +206,8 @@ class TwitchBot { private $ready = false; private $shutting_down = false; + private $last_contact; + } ?>