utility.flagdump: add --list

This commit is contained in:
Cynthia Foxwell 2023-05-27 11:35:59 -06:00
parent 682ba22b36
commit f4f2015fb3

View file

@ -11,7 +11,7 @@ const {
formatTime, formatTime,
safeString, safeString,
} = require("../lib/utils.js"); } = require("../lib/utils.js");
const {getNamesFromString} = require("../lib/unicode.js"); const { getNamesFromString } = require("../lib/unicode.js");
const GameData = require("../../data/games.json"); const GameData = require("../../data/games.json");
@ -174,15 +174,14 @@ const avatar = new Command("avatar");
avatar.category = CATEGORY; avatar.category = CATEGORY;
avatar.helpText = "Get avatar of a user"; avatar.helpText = "Get avatar of a user";
avatar.usage = "<user>"; avatar.usage = "<user>";
avatar.callback = async function (msg, line, [user], {server, guild}) { avatar.callback = async function(msg, line, [user], { server, guild }) {
if (server || guild) { if (server || guild) {
if (!msg.guildID) { if (!msg.guildID) {
return "`--server/--guild` can only be used within guilds."; return "`--server/--guild` can only be used within guilds.";
} else { } else {
const guild = msg.channel.guild || hf.bot.guilds.get(msg.guildID); const guild = msg.channel.guild || hf.bot.guilds.get(msg.guildID);
const url = `${ICON_BASE}${guild.id}/${guild.icon}.${ const url = `${ICON_BASE}${guild.id}/${guild.icon}.${guild.icon.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024"
guild.icon.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024" }`;
}`;
return { return {
embeds: [ embeds: [
{ {
@ -236,24 +235,24 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
const guildUrl = const guildUrl =
guildAvatar && guildAvatar &&
"https://cdn.discordapp.com/guilds/" + "https://cdn.discordapp.com/guilds/" +
guild.id + guild.id +
"/users/" + "/users/" +
member.id + member.id +
"/avatars/" + "/avatars/" +
guildAvatar + guildAvatar +
"." + "." +
(guildAvatar.startsWith("a_") (guildAvatar.startsWith("a_")
? "gif?size=1024&_=.gif" ? "gif?size=1024&_=.gif"
: "png?size=1024"); : "png?size=1024");
baseEmbed.description = baseEmbed.description =
`[Normal avatar](${normalUrl})` + `[Normal avatar](${normalUrl})` +
(guild && guildAvatar ? `\n[Guild avatar](${guildUrl})` : ""); (guild && guildAvatar ? `\n[Guild avatar](${guildUrl})` : "");
baseEmbed.url = normalUrl; baseEmbed.url = normalUrl;
const guildEmbed = {...baseEmbed}; const guildEmbed = { ...baseEmbed };
baseEmbed.image = {url: normalUrl}; baseEmbed.image = { url: normalUrl };
guildEmbed.image = {url: guildUrl}; guildEmbed.image = { url: guildUrl };
return { return {
embeds: [baseEmbed, guildAvatar && guildEmbed].filter((x) => x != null), embeds: [baseEmbed, guildAvatar && guildEmbed].filter((x) => x != null),
@ -281,24 +280,24 @@ avatar.callback = async function (msg, line, [user], {server, guild}) {
const guildUrl = const guildUrl =
guildAvatar && guildAvatar &&
"https://cdn.discordapp.com/guilds/" + "https://cdn.discordapp.com/guilds/" +
guild.id + guild.id +
"/users/" + "/users/" +
msg.author.id + msg.author.id +
"/avatars/" + "/avatars/" +
guildAvatar + guildAvatar +
"." + "." +
(guildAvatar.startsWith("a_") (guildAvatar.startsWith("a_")
? "gif?size=1024&_=.gif" ? "gif?size=1024&_=.gif"
: "png?size=1024"); : "png?size=1024");
baseEmbed.description = baseEmbed.description =
`[Normal avatar](${normalUrl})` + `[Normal avatar](${normalUrl})` +
(guild && guildAvatar ? `\n[Guild avatar](${guildUrl})` : ""); (guild && guildAvatar ? `\n[Guild avatar](${guildUrl})` : "");
baseEmbed.url = normalUrl; baseEmbed.url = normalUrl;
const guildEmbed = {...baseEmbed}; const guildEmbed = { ...baseEmbed };
baseEmbed.image = {url: normalUrl}; baseEmbed.image = { url: normalUrl };
guildEmbed.image = {url: guildUrl}; guildEmbed.image = { url: guildUrl };
return { return {
embeds: [baseEmbed, guildAvatar && guildEmbed].filter((x) => x != null), embeds: [baseEmbed, guildAvatar && guildEmbed].filter((x) => x != null),
@ -311,7 +310,7 @@ const banner = new Command("banner");
banner.category = CATEGORY; banner.category = CATEGORY;
banner.helpText = "Get banner of a user"; banner.helpText = "Get banner of a user";
banner.usage = "<user>"; banner.usage = "<user>";
banner.callback = async function (msg, line, [user], {server, guild}) { banner.callback = async function(msg, line, [user], { server, guild }) {
let id = msg.author.id; let id = msg.author.id;
if (server || guild) { if (server || guild) {
@ -322,9 +321,8 @@ banner.callback = async function (msg, line, [user], {server, guild}) {
if (!guild.banner) return "This guild does not have a banner."; if (!guild.banner) return "This guild does not have a banner.";
const url = `${BANNER_BASE}${guild.id}/${guild.banner}.${ const url = `${BANNER_BASE}${guild.id}/${guild.banner}.${guild.banner.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024"
guild.banner.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024" }`;
}`;
return { return {
embeds: [ embeds: [
{ {
@ -358,9 +356,8 @@ banner.callback = async function (msg, line, [user], {server, guild}) {
if (!userObj.banner) return "This user does not have a banner."; if (!userObj.banner) return "This user does not have a banner.";
const url = `${BANNER_BASE}${userObj.id}/${userObj.banner}.${ const url = `${BANNER_BASE}${userObj.id}/${userObj.banner}.${userObj.banner.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024"
userObj.banner.startsWith("a_") ? "gif?size=1024&_=.gif" : "png?size=1024" }`;
}`;
return { return {
embeds: [ embeds: [
{ {
@ -380,7 +377,7 @@ lookupinvite.category = CATEGORY;
lookupinvite.helpText = "Lookup an invite"; lookupinvite.helpText = "Lookup an invite";
lookupinvite.usage = "<invite code>"; lookupinvite.usage = "<invite code>";
lookupinvite.addAlias("linvite"); lookupinvite.addAlias("linvite");
lookupinvite.callback = async function (msg, line) { lookupinvite.callback = async function(msg, line) {
if (!line || line == "") { if (!line || line == "") {
return "No arguments passed."; return "No arguments passed.";
} }
@ -445,24 +442,22 @@ lookupinvite.callback = async function (msg, line) {
invite.expires_at == null invite.expires_at == null
? "Never" ? "Never"
: `<t:${Math.floor( : `<t:${Math.floor(
new Date(invite.expires_at).getTime() / 1000 new Date(invite.expires_at).getTime() / 1000
)}>`, )}>`,
inline: true, inline: true,
}, },
invite.guild.welcome_screen && { invite.guild.welcome_screen && {
name: "Welcome Screen", name: "Welcome Screen",
value: `"${ value: `"${invite.guild.welcome_screen.description
invite.guild.welcome_screen.description }"\n${invite.guild.welcome_screen.welcome_channels
}"\n${invite.guild.welcome_screen.welcome_channels .map(
.map( (c) =>
(c) => `${c.emoji_id
`${
c.emoji_id
? `[:${c.emoji_name}:](${EMOTE_BASE}${c.emoji_id}.webp)` ? `[:${c.emoji_name}:](${EMOTE_BASE}${c.emoji_id}.webp)`
: c.emoji_name : c.emoji_name
} ${c.description} \`(${c.channel_id})\`` } ${c.description} \`(${c.channel_id})\``
) )
.join("\n")}`, .join("\n")}`,
inline: false, inline: false,
}, },
{ {
@ -470,13 +465,13 @@ lookupinvite.callback = async function (msg, line) {
value: value:
invite.guild.features.length > 0 invite.guild.features.length > 0
? invite.guild.features ? invite.guild.features
.map((feature) => .map((feature) =>
feature feature
.split("_") .split("_")
.map((x) => x[0] + x.substring(1).toLowerCase()) .map((x) => x[0] + x.substring(1).toLowerCase())
.join(" ") .join(" ")
) )
.join(", ") .join(", ")
: "None", : "None",
inline: false, inline: false,
}, },
@ -484,10 +479,9 @@ lookupinvite.callback = async function (msg, line) {
thumbnail: { thumbnail: {
url: url:
invite.guild.icon && invite.guild.icon &&
`${ICON_BASE}${invite.guild.id}/${invite.guild.icon}.${ `${ICON_BASE}${invite.guild.id}/${invite.guild.icon}.${invite.guild.icon.startsWith("a_")
invite.guild.icon.startsWith("a_") ? "gif?size=1024&_=.gif"
? "gif?size=1024&_=.gif" : "png?size=1024"
: "png?size=1024"
}`, }`,
}, },
}; };
@ -503,33 +497,25 @@ lookupinvite.callback = async function (msg, line) {
if (invite.guild.icon || invite.guild.splash || invite.guild.banner) { if (invite.guild.icon || invite.guild.splash || invite.guild.banner) {
embed.fields.push({ embed.fields.push({
name: "\u200b", name: "\u200b",
value: `${ value: `${invite.guild.icon
invite.guild.icon ? `[Icon](${ICON_BASE}${invite.guild.id}/${invite.guild.icon}.${invite.guild.icon.startsWith("a_")
? `[Icon](${ICON_BASE}${invite.guild.id}/${invite.guild.icon}.${ ? "gif?size=1024"
invite.guild.icon.startsWith("a_") : "png?size=1024"
? "gif?size=1024" })`
: "png?size=1024" : ""
})` }${invite.guild.splash
? `${invite.guild.icon ? " | " : ""}[Splash](${SPLASH_BASE}${invite.guild.id
}/${invite.guild.splash}.png?size=2048)`
: "" : ""
}${ }${invite.guild.banner
invite.guild.splash ? `${invite.guild.icon || invite.guild.splash ? " | " : ""
? `${invite.guild.icon ? " | " : ""}[Splash](${SPLASH_BASE}${ }[Banner](${BANNER_BASE}${invite.guild.id}/${invite.guild.banner
invite.guild.id }.${invite.guild.banner.startsWith("a_")
}/${invite.guild.splash}.png?size=2048)` ? "gif?size=1024"
: "png?size=1024"
})`
: "" : ""
}${ }`,
invite.guild.banner
? `${
invite.guild.icon || invite.guild.splash ? " | " : ""
}[Banner](${BANNER_BASE}${invite.guild.id}/${
invite.guild.banner
}.${
invite.guild.banner.startsWith("a_")
? "gif?size=1024"
: "png?size=1024"
})`
: ""
}`,
inline: false, inline: false,
}); });
} }
@ -540,7 +526,7 @@ lookupinvite.callback = async function (msg, line) {
}; };
} }
return {embed}; return { embed };
} }
}; };
hf.registerCommand(lookupinvite); hf.registerCommand(lookupinvite);
@ -549,7 +535,7 @@ const snowflake = new Command("snowflake");
snowflake.category = CATEGORY; snowflake.category = CATEGORY;
snowflake.helpText = "Converts a snowflake ID into readable time."; snowflake.helpText = "Converts a snowflake ID into readable time.";
snowflake.usage = "<--twitter> [snowflake]"; snowflake.usage = "<--twitter> [snowflake]";
snowflake.callback = function (msg, line, [snowflake], {twitter}) { snowflake.callback = function(msg, line, [snowflake], { twitter }) {
const num = parseInt(snowflake); const num = parseInt(snowflake);
if (!isNaN(num)) { if (!isNaN(num)) {
let binary = num.toString(2); let binary = num.toString(2);
@ -596,13 +582,20 @@ const flagdump = new Command("flagdump");
flagdump.category = CATEGORY; flagdump.category = CATEGORY;
flagdump.helpText = "Dumps Discord user flags."; flagdump.helpText = "Dumps Discord user flags.";
flagdump.usage = "[flags or user mention]"; flagdump.usage = "[flags or user mention]";
flagdump.callback = async function (msg, line, [numOrMention], {id}) { flagdump.callback = async function(msg, line, [numOrMention], { id, list }) {
const num = Number(numOrMention); const num = Number(numOrMention);
if (/<@!?(\d+)>/.test(numOrMention) || !isNaN(id)) { if (list) {
let allFlags = 0n;
for (const index in USER_FLAGS) {
if (USER_FLAGS[index] == undefined) continue;
allFlags += 1n << BigInt(index);
}
return `All flags:\n\`\`\`${flagFromInt(allFlags)}\`\`\``;
} else if (/<@!?(\d+)>/.test(numOrMention) || !isNaN(id)) {
const targetId = id || numOrMention.match(/<@!?(\d+)>/)?.[1]; const targetId = id || numOrMention.match(/<@!?(\d+)>/)?.[1];
if (!targetId) return "Got null ID."; if (!targetId) return "Got null ID.";
const guild = msg.channel.guild || hf.bot.guilds.get(msg.guildID); const guild = msg.channel.guild || hf.bot.guilds.get(msg.guildID);
let user = guild && (await guild.fetchMembers({userIDs: [targetId]})); let user = guild && (await guild.fetchMembers({ userIDs: [targetId] }));
if (!user || !user[0]) { if (!user || !user[0]) {
user = hf.bot.users.get(id); user = hf.bot.users.get(id);
} else { } else {
@ -612,16 +605,14 @@ flagdump.callback = async function (msg, line, [numOrMention], {id}) {
if (!user) { if (!user) {
return "User not cached."; return "User not cached.";
} else { } else {
return `\`${user.username}#${ return `\`${user.username}#${user.discriminator
user.discriminator }\`'s public flags:\n\`\`\`${flagFromInt(user.publicFlags)}\`\`\``;
}\`'s public flags:\n\`\`\`${flagFromInt(user.publicFlags)}\`\`\``;
} }
} else if (!isNaN(num)) { } else if (!isNaN(num)) {
return `\`\`\`\n${flagFromInt(num)}\`\`\``; return `\`\`\`\n${flagFromInt(num)}\`\`\``;
} else { } else {
return `\`${msg.author.username}#${ return `\`${msg.author.username}#${msg.author.discriminator
msg.author.discriminator }\`'s public flags:\n\`\`\`${flagFromInt(msg.author.publicFlags)}\`\`\``;
}\`'s public flags:\n\`\`\`${flagFromInt(msg.author.publicFlags)}\`\`\``;
} }
}; };
hf.registerCommand(flagdump); hf.registerCommand(flagdump);
@ -633,7 +624,7 @@ jumbo.usage = "<emoji>";
jumbo.addAlias("e"); jumbo.addAlias("e");
jumbo.addAlias("emote"); jumbo.addAlias("emote");
jumbo.addAlias("emoji"); jumbo.addAlias("emoji");
jumbo.callback = async function (msg, line) { jumbo.callback = async function(msg, line) {
if (CUSTOM_EMOTE_REGEX.test(line)) { if (CUSTOM_EMOTE_REGEX.test(line)) {
const [_, animatedFlag, name, id] = line.match(CUSTOM_EMOTE_REGEX); const [_, animatedFlag, name, id] = line.match(CUSTOM_EMOTE_REGEX);
const animated = animatedFlag === "a"; const animated = animatedFlag === "a";
@ -668,10 +659,10 @@ jumbo.callback = async function (msg, line) {
const name = EMOJI_NAMES[line] const name = EMOJI_NAMES[line]
? `\\:${EMOJI_NAMES[line]}\\:` ? `\\:${EMOJI_NAMES[line]}\\:`
: await getNamesFromString(line).then((name) => : await getNamesFromString(line).then((name) =>
name.map((x) => x[1]).join(", ") name.map((x) => x[1]).join(", ")
); );
const emojiFound = await fetch(url, {method: "HEAD"}).then((res) => res.ok); const emojiFound = await fetch(url, { method: "HEAD" }).then((res) => res.ok);
if (emojiFound) { if (emojiFound) {
return "Emoji not found. The emoji set chosen might not have this emote as an image."; return "Emoji not found. The emoji set chosen might not have this emote as an image.";
@ -681,7 +672,7 @@ jumbo.callback = async function (msg, line) {
const svg = await fetch(url) const svg = await fetch(url)
.then((res) => res.arrayBuffer()) .then((res) => res.arrayBuffer())
.then((b) => Buffer.from(b)); .then((b) => Buffer.from(b));
const converted = await sharp(svg, {density: 2400}) const converted = await sharp(svg, { density: 2400 })
.resize(1024) .resize(1024)
.toBuffer(); .toBuffer();
@ -722,7 +713,7 @@ charinfo.category = CATEGORY;
charinfo.helpText = "Get information about a set of characters."; charinfo.helpText = "Get information about a set of characters.";
charinfo.usage = "[characters]"; charinfo.usage = "[characters]";
charinfo.addAlias("char"); charinfo.addAlias("char");
charinfo.callback = async function (msg, line) { charinfo.callback = async function(msg, line) {
const names = await getNamesFromString(line); const names = await getNamesFromString(line);
const chars = [...line]; const chars = [...line];
const lines = names const lines = names
@ -745,7 +736,7 @@ presence.category = CATEGORY;
presence.helpText = "Get presences of a user."; presence.helpText = "Get presences of a user.";
presence.usage = "<user>"; presence.usage = "<user>";
presence.addAlias("status"); presence.addAlias("status");
presence.callback = async function (msg, line) { presence.callback = async function(msg, line) {
if (!msg.guildID) return "Can only be used in guilds."; if (!msg.guildID) return "Can only be used in guilds.";
let target; let target;
@ -797,9 +788,8 @@ presence.callback = async function (msg, line) {
if (activity.emoji) { if (activity.emoji) {
if (activity.emoji.id) { if (activity.emoji.id) {
const url = `${EMOTE_BASE}${activity.emoji.id}.${ const url = `${EMOTE_BASE}${activity.emoji.id}.${activity.emoji.animated ? "gif" : "png"
activity.emoji.animated ? "gif" : "png" }`;
}`;
embed.author = { embed.author = {
url, url,
icon_url: url, icon_url: url,
@ -995,9 +985,8 @@ presence.callback = async function (msg, line) {
} }
return { return {
content: `Presence for **${target.username}#${ content: `Presence for **${target.username}#${target.discriminator
target.discriminator }**: ${icons.trim()}`,
}**: ${icons.trim()}`,
embeds, embeds,
files, files,
}; };