X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FTwitchBot%2FTwitchChatBot.php;h=a403b0b57b716ae488c1056e8f3e6d8be53573f8;hb=1b9629ce7f600b4aa9c9d51a281e514031871828;hp=5b067a67bccc7eaf76c2e15031da2df04c3fff8f;hpb=6a1dfa72436b2f5e5b34485da7d7ef1053d89ccc;p=alttp.git diff --git a/app/TwitchBot/TwitchChatBot.php b/app/TwitchBot/TwitchChatBot.php index 5b067a6..a403b0b 100644 --- a/app/TwitchBot/TwitchChatBot.php +++ b/app/TwitchBot/TwitchChatBot.php @@ -94,6 +94,7 @@ class TwitchChatBot extends TwitchBot { 'last_special' => [], 'last_write' => time(), 'latest_msgs' => [], + 'queued_special' => false, 'read_since_last_write' => 0, 'wait_msgs' => $this->randomWaitMsgs($channel), 'wait_time' => $this->randomWaitTime($channel), @@ -132,6 +133,20 @@ class TwitchChatBot extends TwitchBot { } private function contextualMsg(Channel $channel) { + if ($this->hasQueuedSpecial($channel)) { + $classification = $this->getQueuedSpecial($channel); + if (is_string($classification)) { + $this->tagChannelSpecialSent($channel, $classification); + } + $this->clearQueuedSpecial($channel); + if ($classification == 'number') { + return $this->randomContextualNumber($channel); + } + if ($classification == 'lol') { + return $this->randomLaughter($channel); + } + return $channel->randomOfClass($classification); + } $last = $this->getLastSpecialSent($channel); $classifications = $this->collectClassifications($channel); $count_quotas = [ @@ -140,9 +155,11 @@ class TwitchChatBot extends TwitchBot { 'hi' => 2, 'hype' => 2, 'lol' => 2, + 'love' => 2, 'number' => 2, 'pog' => 2, 'o7' => 2, + 'wtf' => 2, ]; $time_quotas = [ 'gg' => 600, @@ -150,9 +167,11 @@ class TwitchChatBot extends TwitchBot { 'hi' => 60, 'hype' => 60, 'lol' => 60, + 'love' => 60, 'number' => 300, 'pog' => 60, 'o7' => 300, + 'wtf' => 60, ]; foreach ($classifications as $classification => $count) { if ($classification == $last) continue; @@ -172,7 +191,7 @@ class TwitchChatBot extends TwitchBot { private function randomChat(Channel $channel) { return $channel->queryChatlog() - ->whereIn('classification', ['hi', 'hype', 'lol', 'pog', 'unclassified']) + ->whereNotIn('classification', ['gg', 'gl', 'number', 'o7']) ->first(); } @@ -241,6 +260,25 @@ class TwitchChatBot extends TwitchBot { return random_int($min, $max); } + private function queueSpecial(Channel $channel, $classification) { + $this->getNotes($channel); + $this->notes[$channel->id]['queued_special'] = $classification; + } + + private function hasQueuedSpecial(Channel $channel) { + return !!$this->getQueuedSpecial($channel); + } + + private function getQueuedSpecial(Channel $channel) { + $notes = $this->getNotes($channel); + return $notes['queued_special']; + } + + private function clearQueuedSpecial(Channel $channel) { + $this->getNotes($channel); + $this->notes[$channel->id]['queued_special'] = false; + } + private function tagChannelRead(Channel $channel, IRCMessage $msg) { $this->getNotes($channel); $this->notes[$channel->id]['last_read'] = time(); @@ -256,6 +294,10 @@ class TwitchChatBot extends TwitchBot { if ($this->isDirectedAtMe($msg->getText()) && $this->shouldRespond($channel)) { $this->notes[$channel->id]['wait_msgs'] = 0; $this->notes[$channel->id]['wait_time'] = 0; + $response = $this->getResponseTo($tokenized); + if ($response) { + $this->queueSpecial($channel, $response); + } } } @@ -312,6 +354,28 @@ class TwitchChatBot extends TwitchBot { return false; } + private function getResponseTo(TokenizedMessage $msg) { + switch ($msg->classify()) { + case 'gg': + return ['love', 'eyes', 'thx', 'pog', 'kappa']; + case 'gl': + return ['love', 'eyes', 'thx']; + case 'hi': + return ['hi', 'love', 'eyes', 'hype', 'pog']; + case 'kappa': + return ['kappa', 'lol', 'eyes']; + case 'love': + return ['hi', 'love', 'eyes', 'thx']; + case 'question': + return ['yes', 'no', 'kappa', 'lol', 'wtf', 'number']; + case 'rage': + return ['kappa', 'lol', 'rage']; + case 'wtf': + return ['kappa', 'lol', 'rage']; + } + return false; + } + private $channels; private $notes = [];