148 lines
4.7 KiB
JavaScript
148 lines
4.7 KiB
JavaScript
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,
|
|
},
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|