Skip to content

Commit 07c693e

Browse files
committed
✨ mis en place de la notification d'article sur Telegram
1 parent 03399a0 commit 07c693e

File tree

8 files changed

+98
-45
lines changed

8 files changed

+98
-45
lines changed

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ TORCHLIGHT_TOKEN=
7373
MIX_TORCHLIGHT_TOKEN="${TORCHLIGHT_TOKEN}"
7474
UNSPLASH_ACCESS_KEY=
7575
TELEGRAM_BOT_TOKEN=
76+
TELEGRAM_CHANNEL=
7677
MEDIA_DISK=media
7778
SENTRY_LARAVEL_DSN=
7879
SENTRY_TRACES_SAMPLE_RATE=
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace App\Events;
4+
5+
use App\Models\Article;
6+
use Illuminate\Queue\SerializesModels;
7+
8+
class ArticleWasSubmittedForApproval
9+
{
10+
use SerializesModels;
11+
12+
public function __construct(
13+
public Article $article
14+
) {
15+
}
16+
}

app/Http/Livewire/Articles/Create.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
namespace App\Http\Livewire\Articles;
44

5+
use App\Events\ArticleWasSubmittedForApproval;
56
use App\Gamify\Points\PostCreated;
67
use App\Models\Article;
78
use App\Models\Tag;
89
use App\Models\User;
9-
use App\Notifications\SendSubmittedArticle;
1010
use App\Traits\WithArticleAttributes;
1111
use App\Traits\WithTagsAssociation;
1212
use Illuminate\Support\Facades\Auth;
@@ -67,10 +67,9 @@ public function store()
6767
$article->addMedia($this->file->getRealPath())->toMediaCollection('media');
6868
}
6969

70-
if ($article->submitted_at) {
71-
// Envoi du mail à l'admin pour la validation de l'article.
72-
$admin = User::findByEmailAddress('monneylobe@gmail.com');
73-
Notification::send($admin, new SendSubmittedArticle($article));
70+
if ($article->isAwaitingApproval()) {
71+
// Envoi de la notification sur le channel Telegram pour la validation de l'article.
72+
event(new ArticleWasSubmittedForApproval($article));
7473

7574
session()->flash('status', 'Merci d\'avoir soumis votre article. Vous aurez des nouvelles que lorsque nous accepterons votre article.');
7675
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace App\Listeners;
4+
5+
use App\Events\ArticleWasSubmittedForApproval;
6+
use App\Notifications\ArticleSubmitted;
7+
use Illuminate\Notifications\AnonymousNotifiable;
8+
9+
final class SendNewArticleNotification
10+
{
11+
public function __construct(private AnonymousNotifiable $notifiable)
12+
{
13+
}
14+
15+
public function handle(ArticleWasSubmittedForApproval $event): void
16+
{
17+
$this->notifiable->notify(new ArticleSubmitted($event->article));
18+
}
19+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace App\Notifications;
4+
5+
use App\Models\Article;
6+
use Illuminate\Bus\Queueable;
7+
use Illuminate\Contracts\Queue\ShouldQueue;
8+
use Illuminate\Notifications\Notification;
9+
use NotificationChannels\Telegram\TelegramChannel;
10+
use NotificationChannels\Telegram\TelegramMessage;
11+
12+
class ArticleSubmitted extends Notification implements ShouldQueue
13+
{
14+
use Queueable;
15+
16+
public function __construct(private Article $article)
17+
{
18+
}
19+
20+
public function via($notifiable)
21+
{
22+
if (
23+
! empty(config('services.telegram-bot-api.token')) &&
24+
! empty(config('services.telegram-bot-api.channel'))
25+
) {
26+
return [TelegramChannel::class];
27+
}
28+
29+
return [];
30+
}
31+
32+
public function toTelegram($notifiable)
33+
{
34+
$url = route('articles.show', $this->article->slug());
35+
36+
return TelegramMessage::create()
37+
->to(config('services.telegram-bot-api.channel'))
38+
->content($this->content())
39+
->button('Voir l\'article', $url);
40+
}
41+
42+
private function content(): string
43+
{
44+
$content = "*Nouvel Article Soumis!*\n\n";
45+
$content .= 'Titre: '.$this->article->title."\n";
46+
$content .= 'Par: [@'.$this->article->author->username.']('.route('profile', $this->article->author->username).')';
47+
48+
return $content;
49+
}
50+
}

app/Notifications/SendSubmittedArticle.php

Lines changed: 0 additions & 38 deletions
This file was deleted.

app/Providers/EventServiceProvider.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
namespace App\Providers;
44

5+
use App\Events\ArticleWasSubmittedForApproval;
56
use App\Events\CommentWasAdded;
67
use App\Events\ReplyWasCreated;
78
use App\Events\ThreadWasCreated;
89
use App\Listeners\NotifyMentionedUsers;
910
use App\Listeners\PostNewThreadNotification;
11+
use App\Listeners\SendNewArticleNotification;
1012
use App\Listeners\SendNewCommentNotification;
1113
use App\Listeners\SendNewReplyNotification;
1214
use App\Listeners\SendNewThreadNotification;
@@ -33,6 +35,9 @@ class EventServiceProvider extends ServiceProvider
3335
SendNewThreadNotification::class,
3436
PostNewThreadNotification::class,
3537
],
38+
ArticleWasSubmittedForApproval::class => [
39+
SendNewArticleNotification::class,
40+
],
3641
CommentWasAdded::class => [
3742
SendNewCommentNotification::class,
3843
],

config/services.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
'client_id' => env('TWITTER_CLIENT_ID'),
4343
'client_secret' => env('TWITTER_CLIENT_SECRET'),
4444
'redirect' => env('TWITTER_REDIRECT'),
45-
'consumer_key' => env('TWITTER_CONSUMER_KEY'),
46-
'consumer_secret' => env('TWITTER_CONSUMER_SECRET'),
45+
'consumer_key' => env('TWITTER_CLIENT_ID'),
46+
'consumer_secret' => env('TWITTER_CLIENT_SECRET'),
4747
'access_token' => env('TWITTER_ACCESS_TOKEN'),
4848
'access_secret' => env('TWITTER_ACCESS_SECRET'),
4949
'scopes' => [],
@@ -56,6 +56,7 @@
5656

5757
'telegram-bot-api' => [
5858
'token' => env('TELEGRAM_BOT_TOKEN'),
59+
'channel' => env('TELEGRAM_CHANNEL'),
5960
],
6061

6162
];

0 commit comments

Comments
 (0)