diff --git a/app/Console/Commands/Nostr/PublishUnpublishedItems.php b/app/Console/Commands/Nostr/PublishUnpublishedItems.php new file mode 100644 index 00000000..6b38a343 --- /dev/null +++ b/app/Console/Commands/Nostr/PublishUnpublishedItems.php @@ -0,0 +1,39 @@ +option('model'); + $className = '\\App\Models\\'.$modelName; + $model = $className::query() + ->whereNull('nostr_status') + ->when($modelName === 'BitcoinEvent', fn($q) => $q->where('from', '>', now())) + ->when($modelName === 'CourseEvent', fn($q) => $q->where('from', '>', now())) + ->when($modelName === 'MeetupEvent', fn($q) => $q->where('start', '>', now())) + ->first(); + $this->publishOnNostr($model, $this->getText($model)); + } +} diff --git a/app/Observers/BitcoinEventObserver.php b/app/Observers/BitcoinEventObserver.php index 3f895887..6913b3e9 100644 --- a/app/Observers/BitcoinEventObserver.php +++ b/app/Observers/BitcoinEventObserver.php @@ -17,14 +17,7 @@ class BitcoinEventObserver public function created(BitcoinEvent $bitcoinEvent): void { try { - $text = sprintf("Ein neues Event wurde eingestellt:\n\n%s\n\n%s bis %s\n\n%s\n\n%s\n\n#Bitcoin #Event #Einundzwanzig #gesundesgeld", - $bitcoinEvent->title, - $bitcoinEvent->from->asDateTime(), - $bitcoinEvent->to->asDateTime(), - $bitcoinEvent->venue->name, - $bitcoinEvent->link, - ); - $this->publishOnNostr($bitcoinEvent, $text); + $this->publishOnNostr($bitcoinEvent, $this->getText('BitcoinEvent')); } catch (Exception $e) { Log::error($e->getMessage()); } diff --git a/app/Observers/CourseEventObserver.php b/app/Observers/CourseEventObserver.php index ba6fd10d..c1afc54d 100644 --- a/app/Observers/CourseEventObserver.php +++ b/app/Observers/CourseEventObserver.php @@ -17,15 +17,7 @@ class CourseEventObserver public function created(CourseEvent $courseEvent): void { try { - $text = sprintf("Unser Dozent %s hat einen neuen Kurs-Termin eingestellt:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Kurs #Education #Einundzwanzig #gesundesgeld", - $courseEvent->course->lecturer->name, - $courseEvent->course->name, - str($courseEvent->course->description)->limit(80), - url()->route('school.landingPage.lecturer', - ['country' => 'de', 'lecturer' => $courseEvent->course->lecturer]), - ); - - $this->publishOnNostr($courseEvent, $text); + $this->publishOnNostr($courseEvent, $this->getText('CourseEvent')); } catch (Exception $e) { Log::error($e->getMessage()); } diff --git a/app/Observers/CourseObserver.php b/app/Observers/CourseObserver.php index d86cc152..5d9aa7b2 100644 --- a/app/Observers/CourseObserver.php +++ b/app/Observers/CourseObserver.php @@ -17,15 +17,7 @@ class CourseObserver public function created(Course $course): void { try { - $text = sprintf("Unser Dozent %s hat einen neuen Kurs eingestellt:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Kurs #Education #Einundzwanzig #gesundesgeld", - $course->lecturer->name, - $course->name, - str($course->description)->limit(80), - url()->route('school.landingPage.lecturer', - ['country' => 'de', 'lecturer' => $course->lecturer]), - ); - - $this->publishOnNostr($course, $text); + $this->publishOnNostr($course, $this->getText('Course')); } catch (Exception $e) { Log::error($e->getMessage()); } diff --git a/app/Observers/EpisodeObserver.php b/app/Observers/EpisodeObserver.php deleted file mode 100644 index c1109d86..00000000 --- a/app/Observers/EpisodeObserver.php +++ /dev/null @@ -1,48 +0,0 @@ -setStatus('published'); - $libraryItemName = $libraryItem->name; - $libraryItemName .= ' von '.$libraryItem->lecturer->name; + $from = $libraryItem->name; + $from .= ' von '.$libraryItem->lecturer->name; if ($libraryItem->type !== LibraryItemType::MarkdownArticle()) { if ($libraryItem->whereDoesntHave('libraries', fn($query) => $query->where('libraries.is_public', false)) ->exists()) { - $text = sprintf("Es gibt was Neues zum Lesen oder Anhören:\n\n%s\n\n%s\n\n#Bitcoin #Wissen #Einundzwanzig #gesundesgeld", - $libraryItemName, - url()->route('article.view', - ['libraryItem' => $libraryItem->slug]), - ); - $this->publishOnNostr($libraryItem, $text); + $this->publishOnNostr($libraryItem, $this->getText('LibraryItem', $from)); } } } catch (Exception $e) { diff --git a/app/Observers/MeetupEventObserver.php b/app/Observers/MeetupEventObserver.php index 656b5c79..1b59148c 100644 --- a/app/Observers/MeetupEventObserver.php +++ b/app/Observers/MeetupEventObserver.php @@ -17,18 +17,11 @@ class MeetupEventObserver public function created(MeetupEvent $meetupEvent): void { try { - $meetupName = $meetupEvent->meetup->name; + $from = $meetupEvent->meetup->name; if ($meetupEvent->meetup->nostr) { - $meetupName .= ' @'.$meetupEvent->meetup->nostr; + $from .= ' @'.$meetupEvent->meetup->nostr; } - $text = sprintf("%s hat einen neuen Termin eingestellt:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Meetup #Einundzwanzig #gesundesgeld", - $meetupName, - $meetupEvent->start->asDateTime(), - $meetupEvent->location, - url()->route('meetup.event.landing', - ['country' => 'de', 'meetupEvent' => $meetupEvent->id]), - ); - $this->publishOnNostr($meetupEvent, $text); + $this->publishOnNostr($meetupEvent, $this->getText('MeetupEvent', $from)); } catch (Exception $e) { Log::error($e->getMessage()); } diff --git a/app/Observers/MeetupObserver.php b/app/Observers/MeetupObserver.php index c0919858..da8dcd9d 100644 --- a/app/Observers/MeetupObserver.php +++ b/app/Observers/MeetupObserver.php @@ -17,15 +17,11 @@ class MeetupObserver public function created(Meetup $meetup): void { try { - $meetupName = $meetup->name; + $from = $meetup->name; if ($meetup->nostr) { - $meetupName .= ' @'.$meetup->nostr; + $from .= ' @'.$meetup->nostr; } - $text = sprintf("Eine neue Meetup Gruppe wurde hinzugefügt:\n\n%s\n\n%s\n\n#Bitcoin #Meetup #Einundzwanzig #gesundesgeld", - $meetupName, - url()->route('meetup.landing', ['country' => $meetup->city->country->code, 'meetup' => $meetup]) - ); - $this->publishOnNostr($meetup, $text); + $this->publishOnNostr($meetup, $this->getText('Meetup', $from)); } catch (Exception $e) { Log::error($e->getMessage()); } diff --git a/app/Observers/OrangePillObserver.php b/app/Observers/OrangePillObserver.php index e2c42509..c844d0fc 100644 --- a/app/Observers/OrangePillObserver.php +++ b/app/Observers/OrangePillObserver.php @@ -17,12 +17,7 @@ class OrangePillObserver public function created(OrangePill $orangePill): void { try { - $text = sprintf("Ein neues Bitcoin-Buch liegt nun in diesem öffentlichen Bücherschrank:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Education #Einundzwanzig #gesundesgeld", - $orangePill->bookCase->title, - $orangePill->bookCase->address, - url()->route('bookCases.comment.bookcase', ['country' => 'de', 'bookCase' => $orangePill->bookCase]), - ); - $this->publishOnNostr($orangePill, $text); + $this->publishOnNostr($orangePill, $this->getText('OrangePill')); } catch (Exception $e) { Log::error($e->getMessage()); } diff --git a/app/Traits/NostrTrait.php b/app/Traits/NostrTrait.php index 0214952c..d734daa7 100644 --- a/app/Traits/NostrTrait.php +++ b/app/Traits/NostrTrait.php @@ -2,6 +2,13 @@ namespace App\Traits; +use App\Models\BitcoinEvent; +use App\Models\Course; +use App\Models\LibraryItem; +use App\Models\Meetup; +use App\Models\MeetupEvent; +use App\Models\OrangePill; +use App\Nova\CourseEvent; use Illuminate\Support\Facades\Process; trait NostrTrait @@ -24,4 +31,64 @@ trait NostrTrait 'errorOutput' => $result->errorOutput() ]; } + + public function getText($model, $from = null) + { + if ($model instanceof BitcoinEvent) { + return sprintf("Ein neues Event wurde eingestellt:\n\n%s\n\n%s bis %s\n\n%s\n\n%s\n\n#Bitcoin #Event #Einundzwanzig #gesundesgeld", + $model->title, + $model->from->asDateTime(), + $model->to->asDateTime(), + $model->venue->name, + $model->link, + ); + } + if ($model instanceof CourseEvent) { + return sprintf("Unser Dozent %s hat einen neuen Kurs-Termin eingestellt:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Kurs #Education #Einundzwanzig #gesundesgeld", + $model->course->lecturer->name, + $model->course->name, + str($model->course->description)->limit(80), + url()->route('school.landingPage.lecturer', + ['country' => 'de', 'lecturer' => $model->course->lecturer]), + ); + } + if ($model instanceof MeetupEvent) { + return sprintf("%s hat einen neuen Termin eingestellt:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Meetup #Einundzwanzig #gesundesgeld", + $from, + $model->start->asDateTime(), + $model->location, + url()->route('meetup.event.landing', + ['country' => 'de', 'meetupEvent' => $model->id]), + ); + } + if ($model instanceof Meetup) { + return sprintf("Eine neue Meetup Gruppe wurde hinzugefügt:\n\n%s\n\n%s\n\n#Bitcoin #Meetup #Einundzwanzig #gesundesgeld", + $from, + url()->route('meetup.landing', ['country' => $model->city->country->code, 'meetup' => $model]) + ); + } + if ($model instanceof Course) { + return sprintf("Unser Dozent %s hat einen neuen Kurs eingestellt:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Kurs #Education #Einundzwanzig #gesundesgeld", + $model->lecturer->name, + $model->name, + str($model->description)->limit(80), + url()->route('school.landingPage.lecturer', + ['country' => 'de', 'lecturer' => $model->lecturer]), + ); + } + if ($model instanceof LibraryItem) { + return sprintf("Es gibt was Neues zum Lesen oder Anhören:\n\n%s\n\n%s\n\n#Bitcoin #Wissen #Einundzwanzig #gesundesgeld", + $from, + url()->route('article.view', + ['libraryItem' => $model->slug]), + ); + } + if ($model instanceof OrangePill) { + return sprintf("Ein neues Bitcoin-Buch liegt nun in diesem öffentlichen Bücherschrank:\n\n%s\n\n%s\n\n%s\n\n#Bitcoin #Education #Einundzwanzig #gesundesgeld", + $model->bookCase->title, + $model->bookCase->address, + url()->route('bookCases.comment.bookcase', ['country' => 'de', 'bookCase' => $model->bookCase]), + ); + } + } }