const { DiscordAPIError, Client, Partials, GatewayIntentBits, } = require("discord.js"); export default async function handler(req, res) { const client = new Client({ shards: "auto", partials: [Partials.GuildMember], intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildPresences, ], }); return new Promise((resolve, reject) => { client.login(process.env.TOKEN).then(async () => { const member = await client.guilds .fetch(process.env.GUILD_ID) .then(async guild => { return await guild.members .fetch({ user: req.query.id, cache: false, force: true, }) .catch(error => { return error; }); }); client.destroy(); const discord_user = { username: member.user.username, public_flags: member.user.flags, id: member.user.id, discriminator: member.user.discriminator, avatar: member.user.avatar, }; const discord_status = member?.presence?.status || "offline"; const spo_activity = member?.presence?.activities.find( activity => activity.name == "Spotify" ); let spotify = null; if (spo_activity) { spotify = { timestamps: { start: Date.parse(spo_activity.timestamps.start), end: Date.parse(spo_activity.timestamps.end), }, song: spo_activity.details, artist: spo_activity.state, album_art_url: `https://i.scdn.co/image/${spo_activity.assets.largeImage.slice( 8 )}`, album: spo_activity.assets.largeText, }; } const activities = member?.presence?.activities.map(activity => { if (activity.name == "Spotify") { return { type: activity.type, timestamps: { start: Date.parse(activity.timestamps.start), end: Date.parse(activity.timestamps.end), }, state: activity.state, party: { id: activity.party?.id, }, name: activity.name, id: activity.id, flags: activity.flags, details: activity.details, created_at: activity.createdTimestamp, assets: { large_text: activity.assets?.largeText, large_image: activity.assets?.largeImage, }, }; } let activity_obj = {}; activity.type != null ? (activity_obj["type"] = activity.type) : ""; activity.state ? (activity_obj["state"] = activity.state) : ""; activity.details ? (activity_obj["details"] = activity.details) : ""; activity.flags ? (activity_obj["flags"] = activity.flags) : ""; activity.name ? (activity_obj["name"] = activity.name) : ""; activity.id ? (activity_obj["id"] = activity.id) : ""; activity.createdTimestamp ? (activity_obj["timestamps"] = { start: activity.createdTimestamp }) : ""; activity.buttons.length != 0 ? (activity_obj["buttons"] = activity.buttons) : ""; activity.emoji ? (activity_obj["emoji"] = { name: activity.emoji?.name, id: activity.emoji?.id, animated: activity.emoji?.animated, }) : ""; activity.assets ? (activity_obj["assets"] = { small_text: activity.assets?.smallText, small_image: activity.assets?.smallImage, large_text: activity.assets?.largeText, large_image: activity.assets?.largeImage, }) : ""; activity.applicationId ? (activity_obj["application_id"] = activity.applicationId) : ""; return activity_obj; }); const active_on_discord_web = member?.presence?.clientStatus?.web ? true : false; const active_on_discord_mobile = member?.presence?.clientStatus?.mobile ? true : false; const active_on_discord_desktop = member?.presence?.clientStatus?.desktop ? true : false; if (member instanceof DiscordAPIError) { resolve(); return res .status(400) .json({ success: false, message: "User not found" }); } else { resolve(); return res.status(200).json({ success: true, data: { spotify, discord_user, discord_status, activities, active_on_discord_web, active_on_discord_mobile, active_on_discord_desktop, }, }); } }); }); }