# Discord notification channel for Laravel 6.0+
(opens new window) (opens new window) (opens new window) (opens new window) (opens new window) (opens new window) (opens new window)
This package makes it easy to send notifications using the Discord bot API (opens new window) with Laravel.
# Contents
# Installation
You can install the package via composer:
composer require laravel-notification-channels/discord
Next, you must load the service provider:
// config/app.php
'providers' => [
// ...
NotificationChannels\Discord\DiscordServiceProvider::class,
],
# Setting up your Discord bot
Click the
Create a Bot User
button on your Discord application.Paste your bot's API token, found under
App Bot User
, in yourservices.php
config file:// config/services.php 'discord' => [ 'token' => 'YOUR_API_TOKEN', ],
Add the bot to your server and identify it by running the artisan command:
php artisan discord:setup
# Usage
In every model you wish to be notifiable via Discord, you must add a channel ID property to that model accessible through a routeNotificationForDiscord
method:
class Guild extends Eloquent
{
use Notifiable;
public function routeNotificationForDiscord()
{
return $this->discord_channel;
}
}
NOTE: Discord handles direct messages as though they are a regular channel. If you wish to allow users to receive direct messages from your bot, you will need to create a private channel with that user.
An example workflow may look like the following:
- Your
users
table has two discord columns:discord_user_id
anddiscord_private_channel_id
- When a user updates their Discord user ID (
discord_user_id
), generate and save a private channel ID (discord_private_channel_id
)- Return the user's
discord_private_channel_id
in therouteNotificationForDiscord
method on theUser
modelYou can generate direct message channels by using the
getPrivateChannel
method in theNotificationChannels\Discord\Discord
classuse NotificationChannels\Discord\Discord; class UserDiscordSettingsController { public function store(Request $request) { $userId = $request->input('discord_user_id'); $channelId = app(Discord::class)->getPrivateChannel($userId); Auth::user()->update([ 'discord_user_id' => $userId, 'discord_private_channel_id' => $channelId, ]); } }
Please take note that the
getPrivateChannel
method only accepts Discord's snowflake IDs (opens new window). There is no API route provided by Discord to lookup a user's ID by their name and tag, and the process for copying and pasting a user ID can be confusing to some users. Because of this, it is recommended to add the option for users to connect their Discord account to their account within your application either by logging in with Discord or linking it to their pre-existing account.
You may now tell Laravel to send notifications to Discord channels in the via
method:
// ...
use NotificationChannels\Discord\DiscordChannel;
use NotificationChannels\Discord\DiscordMessage;
class GameChallengeNotification extends Notification
{
public $challenger;
public $game;
public function __construct(Guild $challenger, Game $game)
{
$this->challenger = $challenger;
$this->game = $game;
}
public function via($notifiable)
{
return [DiscordChannel::class];
}
public function toDiscord($notifiable)
{
return DiscordMessage::create("You have been challenged to a game of *{$this->game->name}* by **{$this->challenger->name}**!");
}
}
# Available Message methods
body(string)
: Set the content of the message. (Supports basic markdown (opens new window))embed(array)
: Set the embedded content. (View embed structure (opens new window))components(array)
: Set the component content. (View component structure (opens new window))
# Changelog
Please see CHANGELOG (opens new window) for more information what has changed recently.
# Testing
$ composer test
# Security
If you discover any security related issues, please email cs475x@icloud.com instead of using the issue tracker.
# Contributing
Please see CONTRIBUTING (opens new window) for details.
# Credits
# License
The MIT License (MIT). Please see LICENSE (opens new window) for more information.