nyx-api/src/pages/api/v1/rpc/json/[id].js
2024-02-03 14:06:56 +00:00

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,
},
});
}
});
});
}