mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-app.git
synced 2026-03-14 14:23:18 +00:00
🛠️ Remove deprecated Forge deployment workflow, add logic for fetching missing highscore names via Nostr, and update API routes with refined highscore endpoints.
This commit is contained in:
@@ -8,6 +8,12 @@ use App\Models\Highscore;
|
||||
use Carbon\CarbonImmutable;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use swentel\nostr\Filter\Filter;
|
||||
use swentel\nostr\Message\RequestMessage;
|
||||
use swentel\nostr\Relay\Relay;
|
||||
use swentel\nostr\Relay\RelaySet;
|
||||
use swentel\nostr\Request\Request;
|
||||
use swentel\nostr\Subscription\Subscription;
|
||||
|
||||
class HighscoreController extends Controller
|
||||
{
|
||||
@@ -50,6 +56,14 @@ class HighscoreController extends Controller
|
||||
|
||||
$highscore->save();
|
||||
|
||||
if (empty($highscore->name)) {
|
||||
$fetchedName = $this->fetchNostrName($highscore->npub);
|
||||
if ($fetchedName) {
|
||||
$highscore->name = $fetchedName;
|
||||
$highscore->save();
|
||||
}
|
||||
}
|
||||
|
||||
Log::info('Highscore submission received', [
|
||||
'npub' => $highscore->npub,
|
||||
'name' => $highscore->name,
|
||||
@@ -69,4 +83,64 @@ class HighscoreController extends Controller
|
||||
],
|
||||
], 202);
|
||||
}
|
||||
|
||||
protected function fetchNostrName(string $npub): ?string
|
||||
{
|
||||
$author = trim($npub);
|
||||
|
||||
if (! str_starts_with($author, 'npub1')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$subscription = new Subscription;
|
||||
$filter = new Filter;
|
||||
$filter->setAuthors([$author]);
|
||||
$filter->setKinds([0]);
|
||||
|
||||
$requestMessage = new RequestMessage($subscription->getId(), [$filter]);
|
||||
$relaySet = new RelaySet;
|
||||
$relaySet->setRelays([
|
||||
new Relay('wss://nos.lol'),
|
||||
]);
|
||||
|
||||
$request = new Request($relaySet, $requestMessage);
|
||||
|
||||
try {
|
||||
$response = $request->send();
|
||||
|
||||
foreach ($response as $relayUrl => $relayResponses) {
|
||||
foreach ($relayResponses as $message) {
|
||||
if (! isset($message->event)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
$profile = json_decode($message->event->content, true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
if (isset($profile['name']) && is_string($profile['name']) && $profile['name'] !== '') {
|
||||
Log::info('Fetched nostr profile name for highscore', [
|
||||
'npub' => $author,
|
||||
'relay' => $relayUrl,
|
||||
]);
|
||||
|
||||
return $profile['name'];
|
||||
}
|
||||
} catch (\JsonException $e) {
|
||||
Log::warning('Failed to decode nostr profile for highscore', [
|
||||
'npub' => $author,
|
||||
'relay' => $relayUrl,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
Log::warning('Failed to fetch nostr profile for highscore', [
|
||||
'npub' => $author,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user