From 38a2b63e3f9622cd68a5b8076e4274a5495cde38 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Fri, 24 Feb 2023 10:35:07 +0100 Subject: [PATCH] nostr events added --- app/Http/Livewire/News/ArticleOverview.php | 74 ++----------------- app/Observers/BitcoinEventObserver.php | 15 ++-- app/Observers/CourseEventObserver.php | 14 ++-- app/Observers/CourseObserver.php | 14 ++-- app/Observers/EventObserver.php | 48 ------------ app/Observers/LibraryItemObserver.php | 45 +++++------ app/Observers/MeetupEventObserver.php | 35 ++++----- app/Observers/MeetupObserver.php | 29 +++----- app/Observers/OrangePillObserver.php | 27 +++---- app/Traits/NostrTrait.php | 27 +++++++ ...2_24_090531_add_nostr_fields_to_tables.php | 51 +++++++++++++ 11 files changed, 167 insertions(+), 212 deletions(-) delete mode 100644 app/Observers/EventObserver.php create mode 100644 app/Traits/NostrTrait.php create mode 100644 database/migrations/2023_02_24_090531_add_nostr_fields_to_tables.php diff --git a/app/Http/Livewire/News/ArticleOverview.php b/app/Http/Livewire/News/ArticleOverview.php index 86195ea6..d182459e 100644 --- a/app/Http/Livewire/News/ArticleOverview.php +++ b/app/Http/Livewire/News/ArticleOverview.php @@ -3,8 +3,7 @@ namespace App\Http\Livewire\News; use App\Models\LibraryItem; -use App\Traits\TwitterTrait; -use Illuminate\Support\Facades\Process; +use App\Traits\NostrTrait; use Livewire\Component; use RalphJSmit\Laravel\SEO\Support\SEOData; use WireUi\Traits\Actions; @@ -12,62 +11,7 @@ use WireUi\Traits\Actions; class ArticleOverview extends Component { use Actions; - use TwitterTrait; - - public function tweet($id) - { - $libraryItem = LibraryItem::query() - ->with([ - 'lecturer', - ]) - ->find($id); - if ($libraryItem->tweet) { - $this->notification() - ->error(__('Article already tweeted')); - - return; - } - $libraryItem->setStatus('published'); - $libraryItemName = $libraryItem->name; - if ($libraryItem->lecturer->twitter_username && $libraryItem->type !== 'markdown_article') { - $libraryItemName .= ' von @'.$libraryItem->lecturer->twitter_username; - } - if (!$libraryItem->lecturer->twitter_username) { - $libraryItemName .= ' von '.$libraryItem->lecturer->name; - } - - try { - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - - if (!$libraryItem->approved) { - $this->notification() - ->error(__('Article not approved yet')); - - return; - } - - $text = sprintf("Ein neuer News-Artikel wurde verfasst:\n\n%s\n\n%s\n\n#Bitcoin #News #Einundzwanzig #gesundesgeld", - $libraryItemName, - url()->route('article.view', - ['libraryItem' => $libraryItem->slug]), - ); - - $this->postTweet($text); - - $libraryItem->tweet = true; - $libraryItem->save(); - - $this->notification() - ->success(__('Article tweeted')); - - $this->emit('$refresh'); - } - } catch (\Exception $e) { - $this->notification() - ->error(__('Error tweeting article', $e->getMessage())); - } - } + use NostrTrait; public function nostr($id) { @@ -88,20 +32,14 @@ class ArticleOverview extends Component url()->route('article.view', ['libraryItem' => $libraryItem->slug]), ); - - //noscl publish "Good morning!" - $result = Process::timeout(60 * 5)->run('noscl publish "'.$text.'"'); - - if ($result->successful()) { - $libraryItem->nostr = $result->output(); - $libraryItem->save(); + $result = $this->publishOnNostr($libraryItem, $text); + if ($result['success']) { $this->notification() ->success(title: __('Published on Nostr'), description: $result->output()); - } - if ($result->failed()) { + } else { $this->notification() ->error(title: __('Failed'), - description: 'Exit Code: '.$result->exitCode().' Reason: '.$result->errorOutput()); + description: 'Exit Code: '.$result['exitCode'].' Reason: '.$result['errorOutput']); } } diff --git a/app/Observers/BitcoinEventObserver.php b/app/Observers/BitcoinEventObserver.php index 11c47751..3f895887 100644 --- a/app/Observers/BitcoinEventObserver.php +++ b/app/Observers/BitcoinEventObserver.php @@ -3,20 +3,20 @@ namespace App\Observers; use App\Models\BitcoinEvent; -use App\Traits\TwitterTrait; +use App\Traits\NostrTrait; +use Exception; +use Illuminate\Support\Facades\Log; class BitcoinEventObserver { - use TwitterTrait; + use NostrTrait; /** * Handle the BitcoinEvent "created" event. */ public function created(BitcoinEvent $bitcoinEvent): void { - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - + 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(), @@ -24,8 +24,9 @@ class BitcoinEventObserver $bitcoinEvent->venue->name, $bitcoinEvent->link, ); - - $this->postTweet($text); + $this->publishOnNostr($bitcoinEvent, $text); + } catch (Exception $e) { + Log::error($e->getMessage()); } } diff --git a/app/Observers/CourseEventObserver.php b/app/Observers/CourseEventObserver.php index 3cc7efff..ba6fd10d 100644 --- a/app/Observers/CourseEventObserver.php +++ b/app/Observers/CourseEventObserver.php @@ -3,20 +3,20 @@ namespace App\Observers; use App\Models\CourseEvent; -use App\Traits\TwitterTrait; +use App\Traits\NostrTrait; +use Exception; +use Illuminate\Support\Facades\Log; class CourseEventObserver { - use TwitterTrait; + use NostrTrait; /** * Handle the CourseEvent "created" event. */ public function created(CourseEvent $courseEvent): void { - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - + 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, @@ -25,7 +25,9 @@ class CourseEventObserver ['country' => 'de', 'lecturer' => $courseEvent->course->lecturer]), ); - $this->postTweet($text); + $this->publishOnNostr($courseEvent, $text); + } catch (Exception $e) { + Log::error($e->getMessage()); } } diff --git a/app/Observers/CourseObserver.php b/app/Observers/CourseObserver.php index 2c1f0d25..d86cc152 100644 --- a/app/Observers/CourseObserver.php +++ b/app/Observers/CourseObserver.php @@ -3,20 +3,20 @@ namespace App\Observers; use App\Models\Course; -use App\Traits\TwitterTrait; +use App\Traits\NostrTrait; +use Exception; +use Illuminate\Support\Facades\Log; class CourseObserver { - use TwitterTrait; + use NostrTrait; /** * Handle the Course "created" event. */ public function created(Course $course): void { - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - + 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, @@ -25,7 +25,9 @@ class CourseObserver ['country' => 'de', 'lecturer' => $course->lecturer]), ); - $this->postTweet($text); + $this->publishOnNostr($course, $text); + } catch (Exception $e) { + Log::error($e->getMessage()); } } diff --git a/app/Observers/EventObserver.php b/app/Observers/EventObserver.php deleted file mode 100644 index b9224418..00000000 --- a/app/Observers/EventObserver.php +++ /dev/null @@ -1,48 +0,0 @@ -setStatus('published'); $libraryItemName = $libraryItem->name; - if ($libraryItem->lecturer->twitter_username && $libraryItem->type !== 'markdown_article') { - $libraryItemName .= ' von @'.$libraryItem->lecturer->twitter_username; - } - if (! $libraryItem->lecturer->twitter_username) { - $libraryItemName .= ' von '.$libraryItem->lecturer->name; - } + $libraryItemName .= ' von '.$libraryItem->lecturer->name; - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - - // http://localhost/de/library/library-item?l=de&table[filters][id]=2 - - if ($libraryItem->type !== 'markdown_article') { - 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->postTweet($text); - } + 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); } } - } catch (\Exception $e) { - // todo: log this + } catch (Exception $e) { + Log::error($e->getMessage()); } } diff --git a/app/Observers/MeetupEventObserver.php b/app/Observers/MeetupEventObserver.php index 8d2ade76..656b5c79 100644 --- a/app/Observers/MeetupEventObserver.php +++ b/app/Observers/MeetupEventObserver.php @@ -3,12 +3,13 @@ namespace App\Observers; use App\Models\MeetupEvent; -use App\Traits\TwitterTrait; +use App\Traits\NostrTrait; +use Exception; use Illuminate\Support\Facades\Log; class MeetupEventObserver { - use TwitterTrait; + use NostrTrait; /** * Handle the MeetupEvent "created" event. @@ -16,25 +17,19 @@ class MeetupEventObserver public function created(MeetupEvent $meetupEvent): void { try { - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - - $meetupName = $meetupEvent->meetup->name; - if ($meetupEvent->meetup->twitter_username) { - $meetupName .= ' @'.$meetupEvent->meetup->twitter_username; - } - - $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->postTweet($text); + $meetupName = $meetupEvent->meetup->name; + if ($meetupEvent->meetup->nostr) { + $meetupName .= ' @'.$meetupEvent->meetup->nostr; } - } catch (\Exception $e) { + $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); + } catch (Exception $e) { Log::error($e->getMessage()); } } diff --git a/app/Observers/MeetupObserver.php b/app/Observers/MeetupObserver.php index 39361cea..c0919858 100644 --- a/app/Observers/MeetupObserver.php +++ b/app/Observers/MeetupObserver.php @@ -3,12 +3,13 @@ namespace App\Observers; use App\Models\Meetup; -use App\Traits\TwitterTrait; +use App\Traits\NostrTrait; +use Exception; use Illuminate\Support\Facades\Log; class MeetupObserver { - use TwitterTrait; + use NostrTrait; /** * Handle the Meetup "created" event. @@ -16,22 +17,16 @@ class MeetupObserver public function created(Meetup $meetup): void { try { - if (config('feeds.services.twitterAccountId')) { - $this->setNewAccessToken(1); - - $meetupName = $meetup->name; - if ($meetup->twitter_username) { - $meetupName .= ' @'.$meetup->twitter_username; - } - - $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->postTweet($text); + $meetupName = $meetup->name; + if ($meetup->nostr) { + $meetupName .= ' @'.$meetup->nostr; } - } catch (\Exception $e) { + $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); + } catch (Exception $e) { Log::error($e->getMessage()); } } diff --git a/app/Observers/OrangePillObserver.php b/app/Observers/OrangePillObserver.php index 2df68f78..e2c42509 100644 --- a/app/Observers/OrangePillObserver.php +++ b/app/Observers/OrangePillObserver.php @@ -3,28 +3,29 @@ namespace App\Observers; use App\Models\OrangePill; -use App\Traits\TwitterTrait; +use App\Traits\NostrTrait; +use Exception; +use Illuminate\Support\Facades\Log; class OrangePillObserver { - use TwitterTrait; + use NostrTrait; /** * Handle the OrangePill "created" event. */ public function created(OrangePill $orangePill): void { -// if (config('feeds.services.twitterAccountId')) { -// $this->setNewAccessToken(1); -// -// $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->postTweet($text); -// } + 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); + } catch (Exception $e) { + Log::error($e->getMessage()); + } } /** diff --git a/app/Traits/NostrTrait.php b/app/Traits/NostrTrait.php new file mode 100644 index 00000000..0214952c --- /dev/null +++ b/app/Traits/NostrTrait.php @@ -0,0 +1,27 @@ +run('noscl publish "'.$text.'"'); + + if ($result->successful()) { + $model->nostr_status = $result->output(); + $model->save(); + } + + return [ + 'success' => $result->successful(), + 'output' => $result->output(), + 'exitCode' => $result->exitCode(), + 'errorOutput' => $result->errorOutput() + ]; + } +} diff --git a/database/migrations/2023_02_24_090531_add_nostr_fields_to_tables.php b/database/migrations/2023_02_24_090531_add_nostr_fields_to_tables.php new file mode 100644 index 00000000..3945d26d --- /dev/null +++ b/database/migrations/2023_02_24_090531_add_nostr_fields_to_tables.php @@ -0,0 +1,51 @@ +renameColumn('nostr', 'nostr_status'); + }); + Schema::table('bitcoin_events', function (Blueprint $table) { + $table->text('nostr_status') + ->nullable(); + }); + Schema::table('course_events', function (Blueprint $table) { + $table->text('nostr_status') + ->nullable(); + }); + Schema::table('courses', function (Blueprint $table) { + $table->text('nostr_status') + ->nullable(); + }); + Schema::table('meetup_events', function (Blueprint $table) { + $table->text('nostr_status') + ->nullable(); + }); + Schema::table('meetups', function (Blueprint $table) { + $table->text('nostr_status') + ->nullable(); + }); + Schema::table('orange_pills', function (Blueprint $table) { + $table->text('nostr_status') + ->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('tables', function (Blueprint $table) { + // + }); + } +};