]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/ChatLog.php
respond to whispers
[alttp.git] / app / Models / ChatLog.php
index d5fc76d9325c565b803ec16eaa92c465366822ac..49a57c25a626b5ade8c6b072899591539fc74739 100644 (file)
@@ -25,8 +25,24 @@ class ChatLog extends Model {
                return TokenizedMessage::fromLog($this);
        }
 
+       public function isReply() {
+               return !empty($this->tags['reply-parent-msg-body']);
+       }
+
+       public function getReplyParent() {
+               return str_replace('\\s', ' ', $this->tags['reply-parent-msg-body']);
+       }
+
+       public function getReplyParentUser() {
+               return $this->tags['reply-parent-display-name'];
+       }
+
+       public function getText() {
+               return $this->params[1];
+       }
+
        public function getTextWithoutEmotes() {
-               $text = $this->text_content;
+               $text = $this->params[1];
                if (isset($this->tags['emotes']) && !empty($this->tags['emotes'])) {
                        $emotes = explode('/', $this->tags['emotes']);
                        foreach ($emotes as $emote) {
@@ -34,15 +50,20 @@ class ChatLog extends Model {
                                $positions = explode(',', $set[1]);
                                foreach ($positions as $position) {
                                        $coords = explode('-', $position);
-                                       for ($i = intval($coords[0]); $i <= intval($coords[1]); ++$i) {
-                                               $text[$i] = ' ';
-                                       }
+                                       $text = mb_substr($text, 0, $coords[0]).str_repeat(' ', $coords[1] - $coords[0] + 1).mb_substr($text, $coords[1] + 1);
                                }
                        }
                }
                return trim(preg_replace('/\s+/', ' ', $text));
        }
 
+       public function getTextWithoutReply() {
+               if ($this->isReply()) {
+                       return mb_substr($this->params[1], mb_strlen($this->getReplyParentUser()) + 2);
+               }
+               return $this->params[1];
+       }
+
        public function evaluate() {
                $this->evaluateUser();
                $this->evaluateChannel();
@@ -56,7 +77,7 @@ class ChatLog extends Model {
                        return;
                }
 
-               if ($this->command == 'PRIVMSG') {
+               if ($this->command == 'PRIVMSG' || $this->command == 'WHISPER') {
                        if (static::isKnownBot($this->nick)) {
                                $this->type = 'bot';
                        } else if (substr($this->params[0], 0, 1) == '#') {
@@ -64,7 +85,7 @@ class ChatLog extends Model {
                        } else {
                                $this->type = 'dm';
                        }
-                       $this->text_content = $this->params[1];
+                       $this->text_content = $this->getTextWithoutReply();
                        $this->detectLanguage();
                        $tokenized = $this->tokenize();
                        if ($tokenized->isSpammy()) {
@@ -79,11 +100,13 @@ class ChatLog extends Model {
 
        public static function isKnownBot($nick) {
                return in_array(strtolower($nick), [
+                       'a_n_i_v',
                        'birrellthesquirrel',
                        'funtoon',
                        'nidbot2000',
                        'nightbot',
                        'pokemoncommunitygame',
+                       'sery_bot',
                        'speedgaming',
                        'starbase47',
                        'streamelements',
@@ -97,7 +120,6 @@ class ChatLog extends Model {
 
        protected function evaluateChannel() {
                if (empty($this->params)) {
-                       $this->channel()->associate(null);
                        return;
                }
                $cname = $this->params[0];
@@ -105,7 +127,12 @@ class ChatLog extends Model {
                        $cname = '#'.$cname;
                }
                $channel = Channel::firstWhere('twitch_chat', '=', $cname);
-               $this->channel()->associate($channel);
+               if (!is_null($channel)) {
+                       $this->channel()->associate($channel);
+                       if (empty($this->twitch_category) && now()->sub(15, 'minute')->isBefore($this->created_at)) {
+                               $this->twitch_category = $channel->twitch_category;
+                       }
+               }
        }
 
        protected function detectLanguage() {