fix getTopMember fallback for no member
This commit is contained in:
parent
ff8cbabf7a
commit
0926532073
2 changed files with 60 additions and 5 deletions
|
@ -19,6 +19,42 @@ const {lookupUser} = require("@util/selection.js");
|
||||||
|
|
||||||
const ONE_MONTH = 2628000;
|
const ONE_MONTH = 2628000;
|
||||||
|
|
||||||
|
let vencordFetch = 0;
|
||||||
|
const vencordBadges = new Map();
|
||||||
|
const vencordContributors = new Set();
|
||||||
|
|
||||||
|
const REGEX_DEVS = /id: (\d+)n(,\n\s+badge: false)?/;
|
||||||
|
const REGEX_DEVS_GLOBAL = new RegExp(REGEX_DEVS.source, "g");
|
||||||
|
|
||||||
|
async function fetchVencordData() {
|
||||||
|
const badges = await fetch("https://badges.vencord.dev/badges.json", {
|
||||||
|
headers: {
|
||||||
|
"User-Agent": "HiddenPhox/userinfo (https://gitdab.com/Cynosphere/HiddenPhox)",
|
||||||
|
},
|
||||||
|
}).then((res) => res.json());
|
||||||
|
|
||||||
|
vencordBadges.clear();
|
||||||
|
for (const [id, entry] of Object.entries(badges)) {
|
||||||
|
vencordBadges.set(id, entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
const constants = await fetch(
|
||||||
|
"https://raw.githubusercontent.com/Vendicated/Vencord/main/src/utils/constants.ts"
|
||||||
|
).then((res) => res.text());
|
||||||
|
|
||||||
|
vencordContributors.clear();
|
||||||
|
const entries = constants.match(REGEX_DEVS_GLOBAL);
|
||||||
|
for (const match of entries) {
|
||||||
|
const [, id, noBadge] = match.match(REGEX_DEVS);
|
||||||
|
if (noBadge) continue;
|
||||||
|
if (id == 0) continue;
|
||||||
|
|
||||||
|
vencordContributors.add(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
vencordFetch = Date.now() + 60 * 60 * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
const userinfo = new Command("userinfo");
|
const userinfo = new Command("userinfo");
|
||||||
userinfo.category = "utility";
|
userinfo.category = "utility";
|
||||||
userinfo.helpText = "Get information on a user";
|
userinfo.helpText = "Get information on a user";
|
||||||
|
@ -62,6 +98,14 @@ userinfo.callback = async function (msg, line) {
|
||||||
member = guild.members.get(id);
|
member = guild.members.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Date.now() > vencordFetch) {
|
||||||
|
try {
|
||||||
|
fetchVencordData();
|
||||||
|
} catch {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: horrible, probably needs to be moved out of this command for later
|
// FIXME: horrible, probably needs to be moved out of this command for later
|
||||||
const badges = [];
|
const badges = [];
|
||||||
|
|
||||||
|
@ -179,6 +223,10 @@ userinfo.callback = async function (msg, line) {
|
||||||
badges.push(`[${Icons.badges.quest_completed}](${BadgeURLs.quest_completed})`);
|
badges.push(`[${Icons.badges.quest_completed}](${BadgeURLs.quest_completed})`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vencordContributors.has(id)) {
|
||||||
|
badges.push(`[<:VencordContributor:1273333728709574667>](https://vencord.dev)`);
|
||||||
|
}
|
||||||
|
|
||||||
const defaultAvatar = getDefaultAvatar(id, user.discriminator ?? 0);
|
const defaultAvatar = getDefaultAvatar(id, user.discriminator ?? 0);
|
||||||
const avatar = user.avatar ? CDNEndpoints.USER_AVATAR(id, user.avatar) : defaultAvatar;
|
const avatar = user.avatar ? CDNEndpoints.USER_AVATAR(id, user.avatar) : defaultAvatar;
|
||||||
|
|
||||||
|
@ -291,6 +339,8 @@ userinfo.callback = async function (msg, line) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const vcBadges = vencordBadges.has(id) && vencordBadges.get(id);
|
||||||
|
|
||||||
const embed = {
|
const embed = {
|
||||||
color: getTopColor(msg, id, user.accent_color ?? pastelize(id)),
|
color: getTopColor(msg, id, user.accent_color ?? pastelize(id)),
|
||||||
thumbnail: {
|
thumbnail: {
|
||||||
|
@ -335,6 +385,10 @@ userinfo.callback = async function (msg, line) {
|
||||||
}${clanData.wildcard_descriptors.length > 0 ? ` \u2022 **${clanData.wildcard_descriptors.join(", ")}**` : ""}`,
|
}${clanData.wildcard_descriptors.length > 0 ? ` \u2022 **${clanData.wildcard_descriptors.join(", ")}**` : ""}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
},
|
},
|
||||||
|
vcBadges?.length > 0 && {
|
||||||
|
name: `Vencord Donator Badge${vcBadges.length > 1 ? "s" : ""}`,
|
||||||
|
value: `- ${vcBadges.map(({tooltip, badge}) => `[${tooltip}](${badge})`).join("\n- ")}`,
|
||||||
|
},
|
||||||
member?.roles?.length > 0 && {
|
member?.roles?.length > 0 && {
|
||||||
name: "Roles",
|
name: "Roles",
|
||||||
value: member.roles
|
value: member.roles
|
||||||
|
|
|
@ -21,13 +21,14 @@ function getTopColor(msg, id, fallback = 0x7289da) {
|
||||||
const guild = msg.channel?.guild ?? hf.bot.guilds.get(msg.guildID);
|
const guild = msg.channel?.guild ?? hf.bot.guilds.get(msg.guildID);
|
||||||
if (!guild) return fallback;
|
if (!guild) return fallback;
|
||||||
|
|
||||||
const roles = guild.members
|
const member = guild.members.get(id);
|
||||||
.get(id)
|
|
||||||
.roles.map((role) => guild.roles.get(role))
|
if (!member) return fallback;
|
||||||
.filter((role) => role.color);
|
|
||||||
|
const roles = member.roles.map((role) => guild.roles.get(role)).filter((role) => role.color);
|
||||||
roles.sort((a, b) => b.position - a.position);
|
roles.sort((a, b) => b.position - a.position);
|
||||||
|
|
||||||
return roles[0]?.color || fallback;
|
return roles[0]?.color ?? fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
function safeString(string, newLines = true) {
|
function safeString(string, newLines = true) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue