import express from "express"; import fetch from "node-fetch"; import axios from "axios"; import fs from "fs"; import dotenv from "dotenv"; import { client } from "./index.js"; dotenv.config(); const app = express(); const PORT = process.env.PORT app.get("/callback", async (req, res) => { const code = req.query.code; if (!code) return res.status(400).send("No code provided!"); try { // Exchange code for token const params = new URLSearchParams({ client_id: process.env.CLIENT_ID, client_secret: process.env.CLIENT_SECRET, grant_type: "authorization_code", code, redirect_uri: process.env.REDIRECT_URI, scope: "identify guilds.join", }); const tokenResponse = await fetch("https://discord.com/api/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: params, }); const tokenData = await tokenResponse.json(); if (!tokenData.access_token) { console.error("OAuth2 failed:", tokenData); return res.send("Authorization failed."); } // Get user info const userData = await fetch("https://discord.com/api/v10/users/@me", { headers: { Authorization: `Bearer ${tokenData.access_token}` }, }).then((r) => r.json()); // Save verified user let verified = []; if (fs.existsSync("./verified.json")) { verified = JSON.parse(fs.readFileSync("./verified.json", "utf8")); } if (!verified.find((u) => u.id === userData.id)) { verified.push({ id: userData.id, username: userData.username }); fs.writeFileSync("./verified.json", JSON.stringify(verified, null, 2)); } // Join guild if not already await axios.put( `https://discord.com/api/v10/guilds/${process.env.guildId}/members/${userData.id}`, { access_token: tokenData.access_token }, { headers: { Authorization: `Bot ${process.env.BOT_TOKEN}`, "Content-Type": "application/json", }, } ).catch(() => {}); // --- 🧩 Axios Role Management --- const roleAdd = process.env.VERIFIED_ROLE_ID; const roleRemove = process.env.UNVERIFIED_ROLE_ID; if (roleRemove) { try { await axios.delete( `https://discord.com/api/v10/guilds/${process.env.GUILD_ID}/members/${userData.id}/roles/${process.env.UNVERIFIED_ROLE_ID}`, { headers: { Authorization: `Bot ${process.env.BOT_TOKEN}` } } ); console.log(`ðŸ—‘ï¸ Removed role ${roleRemove} from ${userData.username}`); } catch (err) { console.warn("Failed to remove role:", err.response?.data || err.message); } } if (roleAdd) { try { await axios.put( `https://discord.com/api/v10/guilds/${process.env.GUILD_ID}/members/${userData.id}/roles/${process.env.VERIFIED_ROLE_ID}`, {}, { headers: { Authorization: `Bot ${process.env.BOT_TOKEN}` } } ); console.log(`✅ Added role ${roleAdd} to ${userData.username}`); } catch (err) { console.warn("Failed to add role:", err.response?.data || err.message); } } // --- ✅ Response --- res.send( `
Your roles were updated. You can now close this tab.
` ); } catch (err) { console.error("⌠Callback error:", err); res.status(500).send("Something went wrong during verification."); } }); app.listen(PORT, () => { console.log(`🌠Express running at http://localhost:${PORT}`); }); export default app;