X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FModels%2FChannel.php;h=f50c267eb8a3cae89bfbba84bada33f682a86862;hb=HEAD;hp=bf3b98bc2b231c384a3079613e551514a7435c02;hpb=7649d12f400f164dd06f6a45486221234052dbb6;p=alttp.git diff --git a/app/Models/Channel.php b/app/Models/Channel.php index bf3b98b..f50c267 100644 --- a/app/Models/Channel.php +++ b/app/Models/Channel.php @@ -31,9 +31,59 @@ class Channel extends Model { ->first(); } + public function randomOfClass($class) { + if (is_array($class)) { + return $this->queryChatlog() + ->whereIn('classification', $class) + ->first(); + } + return $this->queryChatlog() + ->where('classification', '=', $class) + ->first(); + } + + public function queryChatlog() { + $min_age = $this->getChatSetting('min_age', 1); + $query = ChatLog::where('type', '=', 'chat') + ->where('banned', '=', false) + ->where('created_at', '<', now()->sub($min_age, 'day')) + ->where(function ($query) { + $query->whereNull('detected_language'); + $query->orWhereIn('detected_language', $this->getPreferredLanguages()); + }) + ->inRandomOrder(); + $source = $this->getChatSetting('source', 'any'); + if (in_array($source, ['catchan', 'chan'])) { + $query->where('channel_id', $this->id); + } + if (in_array($source, ['cat', 'catchan'])) { + $query->where('twitch_category', $this->twitch_category); + } + return $query; + } + + public function getPreferredLanguages() { + $setting = $this->getChatSetting('language'); + if ($setting) { + return [$setting]; + } + if (!empty($this->languages)) { + return $this->languages; + } + return ['de']; + } + + public function getChatSetting($name, $default = null) { + if (array_key_exists($name, $this->chat_settings)) { + return $this->chat_settings[$name]; + } + return $default; + } + public function getGuessingLeaderboard() { $query = $this->winners() ->selectRaw('(select t2.uname from guessing_winners t2 where t2.uid = guessing_winners.uid order by created_at desc limit 1) as name, sum(score) as score') + ->where('score', '!=', 0) ->groupBy('uid') ->orderBy('score', 'desc') ->limit(10); @@ -172,7 +222,7 @@ class Channel extends Model { $transformed = $this->transformGuess($solution); if ($this->guessing_type == 'gtbk') { $int_solution = intval($transformed); - return is_numeric($transformed) && $int_solution > 0 && $int_solution < 23; + return is_numeric($transformed) && $int_solution >= 0 && $int_solution <= 23; } return false; } @@ -204,6 +254,10 @@ class Channel extends Model { return Arr::join($entries, ', ', ' and '); } + public function chat_bot_logs() { + return $this->hasMany(ChatBotLog::class); + } + public function crews() { return $this->hasMany(ChannelCrew::class); }