3 namespace App\Http\Controllers;
5 use App\Models\Channel;
6 use App\Models\TwitchBotCommand;
7 use Illuminate\Database\Eloquent\Builder;
8 use Illuminate\Http\Request;
10 class ChannelController extends Controller {
12 public function search(Request $request) {
13 $validatedData = $request->validate([
14 'joinable' => 'boolean|nullable',
15 'manageable' => 'boolean|nullable',
16 'phrase' => 'string|nullable',
19 $channels = Channel::query();
20 if (isset($validatedData['joinable']) && $validatedData['joinable']) {
21 $channels = $channels->where('twitch_chat', '!=', '');
23 if (isset($validatedData['manageable']) && $validatedData['manageable']) {
24 $user = $request->user();
28 $channels = $channels->whereHas('crews', function (Builder $query) use ($user) {
29 $query->where('user_id', '=', $user->id);
32 if (!empty($validatedData['phrase'])) {
33 $channels = $channels->where('title', 'LIKE', '%'.$validatedData['phrase'].'%')
34 ->orWhere('short_name', 'LIKE', '%'.$validatedData['phrase'].'%');
36 $channels = $channels->limit(5);
37 return $channels->get()->toJson();
40 public function single(Request $request, Channel $channel) {
41 $this->authorize('view', $channel);
42 return $channel->toJson();
45 public function chat(Request $request, Channel $channel) {
46 if (!$channel->twitch_chat) {
47 throw new \Exception('channel has no twitch chat set');
49 $validatedData = $request->validate([
50 'bot_nick' => 'string',
51 'text' => 'string|required',
53 $this->authorize('editRestream', $channel);
54 $nick = empty($validatedData['bot_nick']) ? 'localhorsttv' : $validatedData['bot_nick'];
55 TwitchBotCommand::chat($channel->twitch_chat, $validatedData['text'], $request->user(), $nick);
56 return $channel->toJson();
59 public function chatSettings(Request $request, Channel $channel) {
60 if (!$channel->twitch_chat) {
61 throw new \Exception('channel has no twitch chat set');
63 $validatedData = $request->validate([
64 'wait_msgs_min' => 'integer|min:1',
65 'wait_msgs_max' => 'integer',
66 'wait_time_min' => 'integer',
67 'wait_time_max' => 'integer',
69 $this->authorize('editRestream', $channel);
70 $channel->chat_settings = $validatedData;
72 return $channel->toJson();
75 public function join(Request $request, Channel $channel) {
76 if (!$channel->twitch_chat) {
77 throw new \Exception('channel has no twitch chat set');
79 $validatedData = $request->validate([
80 'bot_nick' => 'string',
82 $this->authorize('editRestream', $channel);
83 $nick = empty($validatedData['bot_nick']) ? 'localhorsttv' : $validatedData['bot_nick'];
84 if ($nick == 'localhorsttv') {
85 $channel->join = true;
86 } else if ($nick == 'horstiebot') {
87 $channel->chat = true;
90 TwitchBotCommand::join($channel->twitch_chat, $request->user(), $nick);
91 return $channel->toJson();
94 public function part(Request $request, Channel $channel) {
95 if (!$channel->twitch_chat) {
96 throw new \Exception('channel has no twitch chat set');
98 $validatedData = $request->validate([
99 'bot_nick' => 'string',
101 $this->authorize('editRestream', $channel);
102 $nick = empty($validatedData['bot_nick']) ? 'localhorsttv' : $validatedData['bot_nick'];
103 if ($nick == 'localhorsttv') {
104 $channel->join = false;
105 } else if ($nick == 'horstiebot') {
106 $channel->chat = false;
109 TwitchBotCommand::part($channel->twitch_chat, $request->user(), $nick);
110 return $channel->toJson();