]> git.localhorst.tv Git - alttp.git/blobdiff - app/TwitchBot/TwitchAppBot.php
respond to whispers
[alttp.git] / app / TwitchBot / TwitchAppBot.php
index 4e2c7d493ff5050c36fa6d0ed37dcfeb0fb0260b..a103a8847316c3ff8595a85a13a5459ea94e1f1b 100644 (file)
@@ -3,7 +3,6 @@
 namespace App\TwitchBot;
 
 use App\Models\Channel;
-use App\Models\TwitchBotCommand;
 
 class TwitchAppBot extends TwitchBot {
 
@@ -19,23 +18,40 @@ class TwitchAppBot extends TwitchBot {
        public function handlePrivMsg(IRCMessage $msg) {
                $target = $msg->getPrivMsgTarget();
                if ($target[0] != '#') return; // direct message
-               $text = $msg->getText();
-               if ($text[0] != '!') return;
                $channel = $this->getMessageChannel($msg);
                if (!$channel) return;
-               $this->handleChatCommand($channel, $msg);
+               $text = $msg->getText();
+               if ($text[0] == '!') {
+                       $this->handleChatCommand($channel, $msg);
+               } else if (
+                       $channel->isAcceptingGuesses() &&
+                       !empty($msg->tags['user-id']) &&
+                       !empty($msg->tags['display-name'] &&
+                       $channel->isValidGuess($text))
+               ) {
+                       $uid = 't:'.$msg->tags['user-id'];
+                       $uname = $msg->tags['display-name'];
+                       try {
+                               $channel->registerGuess($uid, $uname, $text);
+                       } catch (\Exception $e) {
+                               $this->getLogger()->warning('error registering guess "'.$text.'" on channel '.$channel->title.': '.$e->getMessage());
+                       }
+               }
        }
 
        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->getLogger()->info('got command '.$cmd[0].' on channel '.$channel->title);
+               $cmd_name = strtolower($cmd[0]);
+               if (!isset($channel->chat_commands[$cmd_name])) return;
+               $config = $channel->chat_commands[$cmd_name];
+               $this->getLogger()->info('got command '.$cmd_name.' on channel '.$channel->title);
                try {
                        $command = ChatCommand::create($this, $channel, $config);
-                       $command->execute($cmd[1] ?? '');
+                       if ($command->checkAccess($msg)) {
+                               $command->execute($cmd[1] ?? '');
+                       }
                } catch (\Exception $e) {
-                       $this->getLogger()->warning('error executing command '.$cmd[0].' on channel '.$channel->title.': '.$e->getMessage());
+                       $this->getLogger()->warning('error executing command '.$cmd_name.' on channel '.$channel->title.': '.$e->getMessage());
                }
        }
 
@@ -52,18 +68,4 @@ class TwitchAppBot extends TwitchBot {
                }
        }
 
-
-       private function listenCommands() {
-               $this->getLoop()->addPeriodicTimer(1, function () {
-                       if (!$this->isReady()) return;
-                       $command = TwitchBotCommand::where('status', '=', 'pending')->oldest()->first();
-                       if ($command) {
-                               try {
-                                       $command->execute($this);
-                               } catch (\Exception $e) {
-                               }
-                       }
-               });
-       }
-
 }