]> git.localhorst.tv Git - alttp.git/blob - app/TwitchBot/ChatCommand.php
guessing game leaderboard
[alttp.git] / app / TwitchBot / ChatCommand.php
1 <?php
2
3 namespace App\TwitchBot;
4
5 use App\Models\Channel;
6 use Illuminate\Support\Arr;
7
8 abstract class ChatCommand {
9
10         public static function create(TwitchBot $bot, Channel $channel, $config) {
11                 $cmd = null;
12                 switch ($config['command']) {
13                         case 'crew':
14                                 $cmd = new CrewCommand();
15                                 break;
16                         case 'guessing-cancel':
17                                 $cmd = new GuessingCancelCommand();
18                                 break;
19                         case 'guessing-leaderboard':
20                                 $cmd = new GuessingLeaderboardCommand();
21                                 break;
22                         case 'guessing-solve':
23                                 $cmd = new GuessingSolveCommand();
24                                 break;
25                         case 'guessing-start':
26                                 $cmd = new GuessingStartCommand();
27                                 break;
28                         case 'guessing-stop':
29                                 $cmd = new GuessingStopCommand();
30                                 break;
31                         case 'runner':
32                                 $cmd = new RunnerCommand();
33                                 break;
34                         default:
35                                 throw new \Exception('command '.$str.' not found');
36                 }
37                 $cmd->bot = $bot;
38                 $cmd->channel = $channel;
39                 $cmd->config = $config;
40                 return $cmd;
41         }
42
43         public function checkAccess(IRCMessage $msg) {
44                 $restrict = $this->getStringConfig('restrict', 'none');
45                 if ($restrict == 'owner') {
46                         return $msg->isOwner();
47                 }
48                 if ($restrict == 'mod') {
49                         return $msg->isMod();
50                 }
51                 return true;
52         }
53
54         public abstract function execute($args);
55
56         protected function getBooleanConfig($name, $default = false) {
57                 return array_key_exists($name, $this->config) ? $this->config[$name] : $default;
58         }
59
60         protected function getStringConfig($name, $default = '') {
61                 return array_key_exists($name, $this->config) ? $this->config[$name] : $default;
62         }
63
64         protected function listAnd($entries) {
65                 $lang = empty($this->channels->languages) ? 'en' : $this->channel->languages[0];
66                 if ($lang == 'de') {
67                         return Arr::join($entries, ', ', ' und ');
68                 }
69                 return Arr::join($entries, ', ', ' and ');
70         }
71
72         protected function messageChannel($str) {
73                 if (empty($str)) return;
74                 $msg = IRCMessage::privmsg($this->channel->twitch_chat, $str);
75                 $this->bot->sendIRCMessage($msg);
76         }
77
78         protected $bot;
79         protected $channel;
80         protected $config;
81
82 }
83
84 ?>