X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FTwitchBot%2FTwitchBot.php;h=c8d77a36d6f656007a0b3b50c009689b55f3adbe;hb=8fd3830c342ed7734280407b03cc7ced6e116b10;hp=ddc51fe046b2e68d448a18b04cc272ab8702a8c3;hpb=e10222af705e3475fcea6e0b17d1c9984a62db26;p=alttp.git diff --git a/app/TwitchBot/TwitchBot.php b/app/TwitchBot/TwitchBot.php index ddc51fe..c8d77a3 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,14 +98,19 @@ class TwitchBot { public function handleIRCMessage(IRCMessage $msg) { - if ($msg->isPrivMsg()) { - $this->handlePrivMsg($msg); - return; - } + $this->last_contact = time(); if ($msg->isPing()) { $this->sendIRCMessage($msg->makePong()); return; } + if ($msg->isPong()) { + return; + } + $msg->log(); + if ($msg->isPrivMsg()) { + $this->handlePrivMsg($msg); + return; + } if ($msg->isNotice() && $msg->getText() == 'Login authentication failed') { $this->logger->notice('login failed, refreshing access token'); $this->token->refresh(); @@ -121,7 +127,7 @@ class TwitchBot { public function handlePrivMsg(IRCMessage $msg) { $target = $msg->getPrivMsgTarget(); - if ($target[0] != '#') return; + if ($target[0] != '#') return; // direct message $text = $msg->getText(); if ($text[0] != '!') return; $channel = Channel::firstWhere('twitch_chat', '=', $target); @@ -171,13 +177,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 +207,8 @@ class TwitchBot { private $ready = false; private $shutting_down = false; + private $last_contact; + } ?>