]> git.localhorst.tv Git - alttp.git/blob - app/Models/DiscordBotCommand.php
discord bot presence command
[alttp.git] / app / Models / DiscordBotCommand.php
1 <?php
2
3 namespace App\Models;
4
5 use Discord\Discord;
6 use Discord\Parts\User\Activity;
7 use Illuminate\Database\Eloquent\Factories\HasFactory;
8 use Illuminate\Database\Eloquent\Model;
9
10 class DiscordBotCommand extends Model
11 {
12         use HasFactory;
13
14         public function execute(Discord $discord) {
15                 $this->status = 'executing';
16                 $this->executed_at = now();
17                 $this->save();
18
19                 try {
20                         switch ($this->command) {
21                                 case 'presence':
22                                         $this->executePresence($discord);
23                                         break;
24                                 default:
25                                         throw new Exception('unrecognized command');
26                         }
27                         $this->status = 'done';
28                         $this->save();
29                 } catch (\Exception $e) {
30                         $this->status = 'exception';
31                         $this->result = [
32                                 'type' => get_class($e),
33                                 'message' => $e->getMessage(),
34                         ];
35                         $this->save();
36                 }
37         }
38
39         protected function executePresence(Discord $discord) {
40                 $activity = null;
41                 $idle = false;
42                 $status = 'online';
43                 $afk = false;
44                 if (isset($this->parameters['activity'])) {
45                         $activity = new Activity($discord);
46                         $activity->type = $this->parameters['activity'];
47                         if (isset($this->parameters['name'])) {
48                                 $activity->name = $this->parameters['name'];
49                         }
50                         if (isset($this->parameters['url'])) {
51                                 $activity->url = $this->parameters['url'];
52                         }
53                 }
54                 if (isset($this->parameters['idle'])) {
55                         $idle = $this->parameters['idle'];
56                 }
57                 if (isset($this->parameters['status'])) {
58                         $status = $this->parameters['status'];
59                 }
60                 if (isset($this->parameters['afk'])) {
61                         $afk = $this->parameters['afk'];
62                 }
63                 $discord->updatePresence($activity, $idle, $status, $afk);
64         }
65
66         protected $casts = [
67                 'parameters' => 'array',
68                 'result' => 'array',
69                 'executed_at' => 'datetime',
70         ];
71
72 }