]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/DiscordBotCommand.php
discord bot presence command
[alttp.git] / app / Models / DiscordBotCommand.php
diff --git a/app/Models/DiscordBotCommand.php b/app/Models/DiscordBotCommand.php
new file mode 100644 (file)
index 0000000..aec2f56
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+namespace App\Models;
+
+use Discord\Discord;
+use Discord\Parts\User\Activity;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class DiscordBotCommand extends Model
+{
+       use HasFactory;
+
+       public function execute(Discord $discord) {
+               $this->status = 'executing';
+               $this->executed_at = now();
+               $this->save();
+
+               try {
+                       switch ($this->command) {
+                               case 'presence':
+                                       $this->executePresence($discord);
+                                       break;
+                               default:
+                                       throw new Exception('unrecognized command');
+                       }
+                       $this->status = 'done';
+                       $this->save();
+               } catch (\Exception $e) {
+                       $this->status = 'exception';
+                       $this->result = [
+                               'type' => get_class($e),
+                               'message' => $e->getMessage(),
+                       ];
+                       $this->save();
+               }
+       }
+
+       protected function executePresence(Discord $discord) {
+               $activity = null;
+               $idle = false;
+               $status = 'online';
+               $afk = false;
+               if (isset($this->parameters['activity'])) {
+                       $activity = new Activity($discord);
+                       $activity->type = $this->parameters['activity'];
+                       if (isset($this->parameters['name'])) {
+                               $activity->name = $this->parameters['name'];
+                       }
+                       if (isset($this->parameters['url'])) {
+                               $activity->url = $this->parameters['url'];
+                       }
+               }
+               if (isset($this->parameters['idle'])) {
+                       $idle = $this->parameters['idle'];
+               }
+               if (isset($this->parameters['status'])) {
+                       $status = $this->parameters['status'];
+               }
+               if (isset($this->parameters['afk'])) {
+                       $afk = $this->parameters['afk'];
+               }
+               $discord->updatePresence($activity, $idle, $status, $afk);
+       }
+
+       protected $casts = [
+               'parameters' => 'array',
+               'result' => 'array',
+               'executed_at' => 'datetime',
+       ];
+
+}