This is how I checked if user is in my guild
public function index()
{
return Socialite::driver('discord')
->setScopes([
'identify',
'guilds',
'guilds.join',
'guilds.members.read'
])
->redirect();
}
public function store(Request $request)
{
$discordUser = Socialite::driver('discord')->user();
if ($this->isInGuild($discordUser->token)) {
dd('do stuff');
}
$user = User::updateOrCreate([
'discord_id' => $discordUser->getId()
], [
'username' => $discordUser->getName(),
'display_name' => $discordUser->user['global_name'],
'avatar' => $discordUser->getAvatar()
]);
Auth::login($user);
return redirect()->route('index');
}
protected function isInGuild(string $accessToken): bool
{
try {
$response = Http::withToken($accessToken)->get('https://discord.com/api/users/@me/guilds');
if ($response->successful()) {
return collect($response->json())->contains('id', "1203517911197679677");
}
Log::error('Discord API error', [
'status' => $response->status(),
'body' => $response->body()
]);
} catch (Exception $e) {
Log::error('Exception occurred while checking guild membership', [
'message' => $e->getMessage()
]);
}
return false;
}