What is InteractsWithDiscord Trait?
The InteractsWithDiscord.php trait adds useful methods to the User model that can be used to interact with Discord's API.
getTagAttribute
This method will return the user's tag in the format of username#discriminator. If the user migrated to the new username system, it will return the user's display name, for example Jakye.
/**
* Get the user's tag attribute.
*
* @return string
*/accessToken
/**
* Returns the user's access token relationship.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/getAccessToken
This method will try getting a new access_token using the refresh_token if the current access_token is expired.
/**
* Returns the user's access token.
*
* @return Jakyeru\Larascord\Types\AccessToken|null
*/getConnections
This method will make a request to Discord's API. It is recommended to cache the response.
/**
* Get the user's connections.
*
* @return Illuminate\Support\Collection
* @throws Illuminate\Http\Client\RequestException
* @throws Exception
*/Example
use \Illuminate\Support\Facades\Log;
$user = auth()->user();
try {
$connections = $user->getConnections();
Log::info(json_encode($connections->first()));
/*
{
"type": "github",
"id": "36800842",
"name": "JakyeRU",
"visibility": true,
"friend_sync": false,
"show_activity": false,
"verified": true,
"two_way_link": false,
"metadata_visibility": 1
}
*/
} catch (\Exception $exception) {
Log::error('Something went wrong.');
}getAvatar
This method generates the cdn url for user's avatars with a fallback image if the user does not have an avatar.
Parameters
The options parameter is optional.
| Parameter | Type | Default | Description |
|---|---|---|---|
| options | array | [] | Options for the image. |
| options.extension | string | png | Accepted image extensions: png, jpg, jpeg, webp, gif. Fallback image can only be png. |
| options.size | int | 128 | Image size can be any power of two between 16 and 4096. Fallback image will be 256. |
| options.color | int | random | Color of fallback image: 0:blue 1:gray 2:green 3:orange 4:red 5:magenta. |
Example
<img src="{{ Auth::user()->getAvatar('webp', 64, 2) }}" alt="{{ Auth::user()->getTagAttribute() }}" />
/**
* This will fetch the user's avatar with:
* - webp extension (fallback image will be png).
* - height and width of 64px (fallback image will 256x256).
* - Color of the fallback image will be green.
*/getGuilds
This method will make a request to Discord's API. It is recommended to cache the response.
/**
* Returns the user's guilds from Discord's API.
*
* @return Illuminate\Support\Collection
* @throws Illuminate\Http\Client\RequestException
* @throws Exception
*/Parameters
The withCounts parameter is optional.
| Parameter | Type | Description |
|---|---|---|
| withCounts | bool | Include member counts |
Example
use \Illuminate\Support\Facades\Log;
$user = auth()->user();
try {
$guilds = $user->getGuilds(true);
Log::info(json_encode($guilds->first()));
/*
{
"id": "81384788765712384",
"name": "Discord API",
"icon": "a363a84e969bcbe1353eb2fdfb2e50e6",
"owner": false,
"permissions": 104189632,
"features": [
"ANIMATED_ICON",
"INVITE_SPLASH"
],
"permissions_new": "110917634608832",
"approximate_member_count": 425,
"approximate_presence_count": 312
}
*/
} catch (\Exception $exception) {
Log::error('Something went wrong.');
}getGuildMember
This method will make a request to Discord's API. It is recommended to cache the response.
/**
* Returns the user's guild member from Discord's API.
*
* @return Jakyeru\Larascord\Types\GuildMember|null
* @throws Illuminate\Http\Client\RequestException
* @throws Exception
*/Example
use \Illuminate\Support\Facades\Log;
$user = auth()->user();
try {
$guildMember = $user->getGuildMember('123456789012345678');
Log::info(json_encode($guildMember));
/*
{
"avatar": null,
"joined_at": "2023-01-04T09:26:07.172000Z",
"nick": "My Server Nickname",
"roles": [
"1082025544411000832"
],
"deaf": false,
"mute": false
}
*/
} catch (\Exception $exception) {
Log::error('Something went wrong.');
}joinGuild
The bot's access token must be set in .env as LARASCORD_ACCESS_TOKEN.
The bot must belong to the same application used for authorization and must be a member of the guild with CREATE_INSTANT_INVITE permission.
The OAuth2 access token must have the guilds.join scope.
/**
* Join a guild.
*
* @return Jakyeru\Larascord\Types\GuildMember|null
* @throws Illuminate\Http\Client\RequestException
* @throws Exception
*/Parameters
The options parameter is optional.
| Parameter | Type | Description |
|---|---|---|
| guildId | string | The guild ID. |
| options | array | The options. |
| options.nick | string | The nickname to give the user. |
| options.roles | array | The roles to give the user. |
| options.mute | bool | Whether to mute the user. |
| options.deaf | bool | Whether to deafen the user. |
Example
use \Illuminate\Support\Facades\Log;
$user = auth()->user();
try {
$guildMember = $user->joinGuild('81384788765712384', [
'roles' => ['81384788765712384'],
'nick' => 'Test'
]);
Log::info('Joined guild.');
} catch (\Exception $exception) {
Log::error('Something went wrong.');
}