revolution / laravel-notification-discord-webhook
Laravel Notification for Discord(Webhook)
1.1.5
2024-09-16 08:47 UTC
Requires
- php: ^8.1
- illuminate/notifications: ^10.0||^11.0
Requires (Dev)
- orchestra/testbench: ^8.0||^9.0
README
https://discord.com/developers/docs/resources/webhook#execute-webhook
Requirements
- PHP >= 8.1
- Laravel >= 10.0
Installation
Composer
composer require revolution/laravel-notification-discord-webhook
Config
Get the webhook url from your Discord server settings.
https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
config/services.php
'discord' => [ 'webhook' => env('DISCORD_WEBHOOK'), ],
.env
DISCORD_WEBHOOK=https://discord.com/api/webhooks/...
Usage
<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; use Revolution\Laravel\Notification\DiscordWebhook\DiscordChannel; use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage; class DiscordNotification extends Notification implements ShouldQueue { use Queueable; public function __construct(protected string $content) { // } public function via($notifiable): array { return [DiscordChannel::class]; } public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create(content: $this->content); } }
On-Demand Notification
use Illuminate\Support\Facades\Notification; Notification::route('discord-webhook', config('services.discord.webhook')) ->notify(new DiscordNotification('test'));
User Notification
use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; public function routeNotificationForDiscordWebhook($notification): string { return $this->discord_webhook; } }
$user->notify(new DiscordNotification('test'));
Send embeds
public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create() ->embeds([ [ 'title' => 'INFO', 'description' => $this->content, 'url' => route('home'), ], ]); }
Send attachment files
Send only file. content
and filename
are required.
use Revolution\Laravel\Notification\DiscordWebhook\DiscordAttachment; use Illuminate\Support\Facades\Storage; public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create() ->file( DiscordAttachment::make( content: Storage::get('test.png'), filename: 'test.png', description: 'test', filetype: 'image/png' )); }
Using files in embed.
use Revolution\Laravel\Notification\DiscordWebhook\DiscordAttachment; use Illuminate\Support\Facades\Storage; public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create() ->embeds([ [ 'title' => 'test', 'description' => $this->content, 'thumbnail' => [ 'url' => 'attachment://test.jpg', ], 'image' => [ 'url' => 'attachment://test2.jpg', ], ], ]); ->file(DiscordAttachment::make( content: Storage::get('test.jpg'), filename: 'test.jpg', description: 'test', filetype: 'image/jpg' )) ->file(new DiscordAttachment( content: Storage::get('test2.jpg'), filename: 'test2.jpg', description: 'test2', filetype: 'image/jpg' )); }
Send any message
public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create() ->with([ 'content' => $this->content, 'embeds' => [[]], ]); }
LICENSE
MIT