]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/ChatLog.php
chat log evaluation
[alttp.git] / app / Models / ChatLog.php
index 9e50addc46d50f8d8197b10e58cd7016842ba6fa..aa4e7aeef913185a1120043b2e8fcfbf66c9e201 100644 (file)
@@ -9,9 +9,111 @@ class ChatLog extends Model {
 
        use HasFactory;
 
+       public function channel() {
+               return $this->belongsTo(Channel::class);
+       }
+
+       public function user() {
+               return $this->belongsTo(User::class);
+       }
+
+       public function evaluate() {
+               $this->evaluateUser();
+               $this->evaluateChannel();
+
+               if (is_null($this->nick)) {
+                       $this->type = 'system';
+                       return;
+               }
+               if ($this->nick == 'localhorsttv') {
+                       $this->type = 'self';
+                       return;
+               }
+
+               if ($this->command == 'PRIVMSG') {
+                       if ($this->isKnownBot()) {
+                               $this->type = 'bot';
+                       } else if (substr($this->params[0], 0, 1) == '#') {
+                               $this->type = 'chat';
+                       } else {
+                               $this->type = 'dm';
+                       }
+                       $this->text_content = $this->params[1];
+                       if ($this->scanForSpam()) {
+                               $this->banned = true;
+                       }
+                       return;
+               }
+
+               throw new \Exception('unidentified message');
+       }
+
+       public function isKnownBot() {
+               return in_array(strtolower($this->nick), [
+                       'funtoon',
+                       'nightbot',
+                       'pokemoncommunitygame',
+                       'streamelements',
+                       'wizebot',
+                       'zockerstuebchen',
+               ]);
+       }
+
+       protected function evaluateUser() {
+       }
+
+       protected function evaluateChannel() {
+               if (empty($this->params)) {
+                       $this->channel()->associate(null);
+                       return;
+               }
+               $cname = $this->params[0];
+               if (substr($cname, 0, 1) != '#') {
+                       $cname = '#'.$cname;
+               }
+               $channel = Channel::firstWhere('twitch_chat', '=', $cname);
+               $this->channel()->associate($channel);
+       }
+
+       protected function scanForSpam() {
+               if (substr($this->text_content, 0, 1) == '!') {
+                       return true;
+               }
+               if (strpos($this->text_content, '$') !== false) {
+                       return true;
+               }
+               if (strpos($this->text_content, '€') !== false) {
+                       return true;
+               }
+               if (strpos($this->text_content, '@') !== false) {
+                       return true;
+               }
+               if (strpos($this->text_content, '://') !== false) {
+                       return true;
+               }
+               if (is_numeric($this->text_content)) {
+                       return true;
+               }
+               if (strpos($this->text_content, 'followers') !== false) {
+                       return true;
+               }
+               if (strpos($this->text_content, 'promotion') !== false) {
+                       return true;
+               }
+               if (strpos($this->text_content, 'viewers') !== false) {
+                       return true;
+               }
+               if (strpos($this->text_content, 'view ers') !== false) {
+                       return true;
+               }
+               return false;
+       }
+
        protected $casts = [
+               'banned' => 'boolean',
                'params' => 'array',
                'tags' => 'array',
+               'user_id' => 'string',
        ];
 
        protected $fillable = [