diff options
author | floppydiskette <git@diskfloppy.me> | 2024-08-08 15:21:30 +0100 |
---|---|---|
committer | floppydiskette <git@diskfloppy.me> | 2024-08-08 15:21:30 +0100 |
commit | 8650d88a794497543b1333f3e4ad5ea9bf753071 (patch) | |
tree | c2901bfbe124dcb9d16c4b9f2f3bed1e09f85815 /app/View/Components/DiscordStatus.php | |
parent | c148b6237ae561efdc727efab7f7188b1afb9cd4 (diff) |
Finish that shit
Diffstat (limited to 'app/View/Components/DiscordStatus.php')
-rw-r--r-- | app/View/Components/DiscordStatus.php | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/app/View/Components/DiscordStatus.php b/app/View/Components/DiscordStatus.php new file mode 100644 index 0000000..fac06ae --- /dev/null +++ b/app/View/Components/DiscordStatus.php @@ -0,0 +1,66 @@ +<?php + +namespace App\View\Components; + +use Closure; +use Illuminate\Contracts\View\View; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\Http; +use Illuminate\View\Component; + +class DiscordStatus extends Component +{ + /** + * Create a new component instance. + */ + public function __construct() + { + // + } + + /** + * Returns current Discord presence from Lanyard API + * @return array|mixed + */ + public function getDiscordPresence(): mixed { + // If it's already cached just return that + if (Cache::has('discord_presence')) { + return Cache::get('discord_presence'); + } + + $response = Http::get('https://api.lanyard.rest/v1/users/' . Config::get('services.lanyard.user_id')); + $data = $response->json(); + $presence = $data["data"]; + Cache::put('discord_presence', $presence, now()->addSeconds(60)); + return $presence; + } + + public function getOnlineStatus(): array { + $presence = $this->getDiscordPresence(); + return match ($presence["discord_status"]) { + "online", "dnd" => [ + "text" => "online", + "color" => "#02c83a" + ], + "idle" => [ + "text" => "away", + "color" => "#d77c20" + ], + default => [ + "text" => "offline", + "color" => "#ca3329" + ], + }; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + return view('components.discord-status', [ + 'status' => $this->getOnlineStatus(), + ]); + } +} |