X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FTwitchBot%2FTwitchBot.php;fp=app%2FTwitchBot%2FTwitchBot.php;h=79b6bf13f1861af5bde63e400992cbc060e08ae0;hb=85879ea0c27ce6506919e2c083a139c470c0952c;hp=c8d77a36d6f656007a0b3b50c009689b55f3adbe;hpb=e8eb106aa5adab6dd992390cb3836589e4163e72;p=alttp.git diff --git a/app/TwitchBot/TwitchBot.php b/app/TwitchBot/TwitchBot.php index c8d77a3..79b6bf1 100644 --- a/app/TwitchBot/TwitchBot.php +++ b/app/TwitchBot/TwitchBot.php @@ -3,7 +3,6 @@ namespace App\TwitchBot; use App\Models\Channel; -use App\Models\TwitchBotCommand; use App\Models\TwitchToken; use Monolog\Handler\StreamHandler; use Monolog\Logger; @@ -14,18 +13,18 @@ use React\EventLoop\Loop; class TwitchBot { - public function __construct() { + public function __construct($nick) { + $this->nick = $nick; $this->logger = new Logger('TwitchBot'); $this->logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO)); - $this->token = TwitchToken::firstWhere('nick', 'localhorsttv'); + $this->token = TwitchToken::firstWhere('nick', $nick); if (!$this->token) { throw new \Exception('unable to find access token'); } $this->connector = new Connector(); $this->connect(); - $this->listenCommands(); $this->startPinger(); } @@ -37,6 +36,10 @@ class TwitchBot { return Loop::get(); } + public function isReady() { + return $this->ready; + } + public function run() { $this->shutting_down = false; $this->getLoop()->run(); @@ -106,7 +109,7 @@ class TwitchBot { if ($msg->isPong()) { return; } - $msg->log(); + $this->logMessage($msg); if ($msg->isPrivMsg()) { $this->handlePrivMsg($msg); return; @@ -125,58 +128,26 @@ class TwitchBot { } } - public function handlePrivMsg(IRCMessage $msg) { + public function getMessageChannel(IRCMessage $msg) { $target = $msg->getPrivMsgTarget(); - if ($target[0] != '#') return; // direct message - $text = $msg->getText(); - if ($text[0] != '!') return; - $channel = Channel::firstWhere('twitch_chat', '=', $target); - if (!$channel) return; - $this->handleChatCommand($channel, $msg); - } - - public function handleChatCommand(Channel $channel, IRCMessage $msg) { - $cmd = explode(' ', ltrim($msg->getText(), '!'), 2); - if (!isset($channel->chat_commands[$cmd[0]])) return; - $config = $channel->chat_commands[$cmd[0]]; - $this->logger->info('got command '.$cmd[0].' on channel '.$channel->title); - try { - $command = ChatCommand::create($this, $channel, $config); - $command->execute($cmd[1] ?? ''); - } catch (\Exception $e) { - $this->logger->warning('error executing command '.$cmd[0].' on channel '.$channel->title.': '.$e->getMessage()); + if (substr($target, 0, 1) !== '#') { + $target = '#'.$target; } + return Channel::firstWhere('twitch_chat', '=', $target); + } + + public function logMessage(IRCMessage $msg) { + } + + public function handlePrivMsg(IRCMessage $msg) { } public function login() { $this->ws->send('PASS oauth:'.$this->token->access); - $this->ws->send('NICK localhorsttv'); + $this->ws->send('NICK '.$this->nick); } public function joinChannels() { - $this->logger->info('joining channels'); - $channels = Channel::where('twitch_chat', '!=', '')->where('join', '=', true)->get(); - $names = []; - foreach ($channels as $channel) { - $names[] = $channel->twitch_chat; - } - $chunks = array_chunk($names, 10); - foreach ($chunks as $chunk) { - $this->sendIRCMessage(IRCMessage::join($chunk)); - } - } - - private function listenCommands() { - $this->getLoop()->addPeriodicTimer(1, function () { - if (!$this->ready) return; - $command = TwitchBotCommand::where('status', '=', 'pending')->oldest()->first(); - if ($command) { - try { - $command->execute($this); - } catch (\Exception $e) { - } - } - }); } private function startPinger() { @@ -200,6 +171,7 @@ class TwitchBot { private $logger; + private $nick; private $token; private $connector;