2024-08-08 14:21:30 +00:00
|
|
|
<?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();
|
2024-08-30 23:47:01 +00:00
|
|
|
if (!isset($data["data"])) return null;
|
2024-08-08 14:21:30 +00:00
|
|
|
$presence = $data["data"];
|
|
|
|
Cache::put('discord_presence', $presence, now()->addSeconds(60));
|
|
|
|
return $presence;
|
|
|
|
}
|
|
|
|
|
2024-08-30 23:47:01 +00:00
|
|
|
public function getOnlineStatus(): ?array {
|
2024-08-08 14:21:30 +00:00
|
|
|
$presence = $this->getDiscordPresence();
|
2024-08-30 23:47:01 +00:00
|
|
|
if ($presence == null) return null;
|
2024-08-08 14:21:30 +00:00
|
|
|
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(),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
}
|