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 = [