auth-bot/auth/discord.js
2024-02-03 14:08:57 +00:00

49 lines
1.4 KiB
JavaScript

const passport = require("passport");
const { Strategy } = require("passport-discord");
const db = require("../models/user");
const config = require("../config");
passport.serializeUser(async (user, done) => {
try {
done(null, user.id);
} catch (e) {
done(null, null);
}
});
passport.deserializeUser(async (obj, done) => {
const user = await db.findOne({ id: obj });
if (user) done(null, user);
});
passport.use(
new Strategy(
{
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: process.env.CALLBACK_URL,
scope: config.scope,
},
async (accessToken, refreshToken, profile, done) => {
const { id, username, avatar } = profile;
const data = await db.findOne({ username });
if (data) {
data.accessToken = accessToken;
data.refreshToken = refreshToken;
data.username = username;
data.guilds = profile.guilds.map(g => g.id);
data.avatar = `https://cdn.discordapp.com/avatars/${id}/${avatar}`;
data.save();
done(null, data);
} else {
const ndb = {
id,
username,
avatar: `https://cdn.discordapp.com/avatars/${id}/${avatar}`,
refreshToken,
accessToken,
guilds: profile.guilds.map(g => g.id),
};
const nd = new db(ndb).save();
done(null, nd);
}
}
)
);