revolution / laravel-notification-discord-webhook
Laravel Notification for Discord(Webhook)
Fund package maintenance!
invokable
Requires
- php: ^8.2
- illuminate/notifications: ^11.0||^12.0
Requires (Dev)
- orchestra/testbench: ^9.0
README
Introduction
This package allows you to easily send notifications to Discord by simply specifying a webhook. With this Laravel notification channel, you can quickly integrate Discord notifications into your application without dealing with the complexities of Discord's API. Just configure your webhook URL and start sending notifications right away.
https://discord.com/developers/docs/resources/webhook#execute-webhook
Requirements
- PHP >= 8.2
- Laravel >= 11.0
Installation
composer require revolution/laravel-notification-discord-webhook
Uninstall
composer remove 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
use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage; use Revolution\Laravel\Notification\DiscordWebhook\DiscordEmbed; public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create() ->embed( DiscordEmbed::make( title: 'INFO', description: $this->content, url: route('home'), ) ); }
Send attachment files
Send only file. content
and filename
are required.
use Revolution\Laravel\Notification\DiscordWebhook\DiscordMessage; 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\DiscordMessage; use Revolution\Laravel\Notification\DiscordWebhook\DiscordAttachment; use Revolution\Laravel\Notification\DiscordWebhook\DiscordEmbed; use Illuminate\Support\Facades\Storage; public function toDiscordWebhook(object $notifiable): DiscordMessage { return DiscordMessage::create() ->embed( DiscordEmbed::make( title: 'test', description: $this->content, image: 'attachment://test.jpg', thumbnail: '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