Module AUTH Discord

Introduction
Ce module gère toute l’authentification Discord, les sessions utilisateur, les webhooks et la vérification de guilde.

Fonctionnalités principales :

  • OAuth2 Discord
  • Gestion utilisateur DB
  • Sessions sécurisées
  • Remember me
  • Vérification guilde
1. Configuration centrale

$CONFIG = [
	'guilds' => [
		'target_id' => 'xxxxxxxxxxx',
		'target_name' => 'Edelweiss',
	],
	'discord' => [
		'client_id' => 'xxxxxxxxxxx',
		'client_secret' => 'xxxxxxxxxxx',
		'oauth_url' => 'https://discord.com/api/oauth2/authorize',
		'token_url' => 'https://discord.com/api/oauth2/token',
		'api_me' => 'https://discord.com/api/users/@me'
	],
	'webhook' => [
		'event_publish' => 'https://discord.com/api/webhooks/xxx',
		'post_publish' => 'https://discord.com/api/webhooks/xxx'
	],
	'bot' => [
		'token' => 'xxxxxxxxxxx'
	]
];									
2. Helpers globaux
function h($s) {
	return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

function generate_token($len = 32) {
	return bin2hex(random_bytes($len));
}

function secure_setcookie($name, $value, $exp) {
	setcookie($name, $value, [
		'expires' => $exp,
		'path' => '/',
		'secure' => !empty($_SERVER['HTTPS']),
		'httponly' => true,
		'samesite' => 'Lax'
	]);
}
3. Authentification Discord (OAuth2)
header("Location: $DISCORD_OAUTH_URL?" . http_build_query([
	'client_id' => $DISCORD_CLIENT_ID,
	'redirect_uri' => $DISCORD_REDIRECT,
	'response_type' => 'code',
	'scope' => 'identify guilds'
]));
4. Gestion utilisateur
$me = json_decode(curl_exec($ch), true);

$discord_id = $me['id'];
$username = $me['username'].'#'.$me['discriminator'];
$avatar = $me['avatar'] ?? null;
Utilisateur créé ou mis à jour automatiquement en base de données.
5. Webhooks Discord
function publierEventDiscord(array $e) {
	$payload = [
		'embeds' => [[
			'title' => "Evenement FFXIV",
			'description' => $e['nom'],
			'url' => $e['lien']
		]]
	];
}
6. Sessions sécurisées
session_set_cookie_params([
	'httponly' => true,
	'secure' => true,
	'samesite' => 'Lax'
]);

session_start();
7. Remember Me
$token = generate_token(32);

setcookie('remember_me', $token, time() + 2592000);
8. Vérification de guilde Discord
function getGuildMember($botToken, $guildId, $userId) {
	$url = "https://discord.com/api/guilds/$guildId/members/$userId";
}