From cabe10c2302d12bc30d80c0fdb3d061c2fd6c7d6 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Thu, 5 Oct 2023 13:41:47 -0600 Subject: [PATCH] utility: add pomelo command, also rename username helper to formatUsername --- src/index.js | 7 ++-- src/lib/utils.js | 6 ++-- src/modules/misc.js | 6 ++-- src/modules/moderation.js | 12 ++++--- src/modules/music.js | 4 +-- src/modules/utility.js | 71 +++++++++++++++++++++++++++++++++------ 6 files changed, 80 insertions(+), 26 deletions(-) diff --git a/src/index.js b/src/index.js index 63d56c5..289858a 100644 --- a/src/index.js +++ b/src/index.js @@ -48,7 +48,7 @@ global.hf = { }; const CommandDispatcher = require("./lib/commandDispatcher.js"); -const {pomello} = require("./lib/utils.js"); +const {formatUsername} = require("./lib/utils.js"); for (const file of fs.readdirSync(resolve(__dirname, "modules"))) { require(resolve(__dirname, "modules", file)); @@ -84,7 +84,10 @@ bot.on("messageUpdate", (msg, oldMsg) => { bot.once("ready", async () => { logger.info("hf:main", "Connected to Discord."); - logger.info("hf:main", `Logged in as: ${pomello(bot.user)} (${bot.user.id})`); + logger.info( + "hf:main", + `Logged in as: ${formatUsername(bot.user)} (${bot.user.id})` + ); const channel = await bot.getDMChannel(config.owner_id); if (channel) { diff --git a/src/lib/utils.js b/src/lib/utils.js index 5183799..8f288ec 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -10,7 +10,7 @@ function pastelize(id) { return parseInt(hex, 16); } -function pomello(user) { +function formatUsername(user) { return user.discriminator && user.discriminator != "0" ? `${user.username}#${user.discriminator}` : `@${user.username}`; @@ -328,7 +328,7 @@ async function lookupUser(msg, str, filter) { selection.push({ value: user, key: user.id, - display: `${pomello(user)}${user.nick ? ` (${user.nick})` : ""}`, + display: `${formatUsername(user)}${user.nick ? ` (${user.nick})` : ""}`, }); } } @@ -403,7 +403,7 @@ function getUploadLimit(guild) { module.exports = { pastelize, - pomello, + formatUsername, getTopColor, safeString, formatTime, diff --git a/src/modules/misc.js b/src/modules/misc.js index d3d65c6..44b35f0 100644 --- a/src/modules/misc.js +++ b/src/modules/misc.js @@ -7,7 +7,7 @@ const { formatTime, hastebin, parseHtmlEntities, - pomello, + formatUsername, safeString, } = require("../lib/utils.js"); const GoogleImages = require("google-images"); @@ -234,7 +234,7 @@ poll.callback = async function (msg, line, [topic, ...options]) { if (arrOptions.length < 2) return "A minimum of two options are required."; const reactions = []; - let displayString = `**${pomello( + let displayString = `**${formatUsername( msg.author )}** has started a poll:\n## __${topic}__\n`; for (let i = 0; i < arrOptions.length; i++) { @@ -262,7 +262,7 @@ vote.callback = async function (msg, line, topic, {maybe}) { topic = topic.join(" "); return { - content: `**${pomello( + content: `**${formatUsername( msg.author )}** has started a vote:\n## __${topic}__\n<:ms_tick:503341995348066313>: Yes\n<:ms_cross:503341994974773250>: No${ maybe ? "\n<:ms_tilda:581268710925271095>: Maybe/Uncertain" : "" diff --git a/src/modules/moderation.js b/src/modules/moderation.js index c836d45..e58c8f4 100644 --- a/src/modules/moderation.js +++ b/src/modules/moderation.js @@ -1,7 +1,7 @@ const Command = require("../lib/command.js"); const CATEGORY = "moderation"; -const {lookupUser, pomello} = require("../lib/utils.js"); +const {lookupUser, formatUsername} = require("../lib/utils.js"); const tidy = new Command("tidy"); tidy.addAlias("prune"); @@ -25,7 +25,7 @@ tidy.callback = async function (msg, line, [subcommand, count, extra]) { }); await msg.channel.deleteMessages( messages.map((m) => m.id), - `Message purge by ${pomello(msg.author)}` + `Message purge by ${formatUsername(msg.author)}` ); return `Deleted ${messages.length} message(s).`; @@ -41,7 +41,9 @@ tidy.callback = async function (msg, line, [subcommand, count, extra]) { }); await msg.channel.deleteMessages( messages.filter((m) => m.author.id == user.id).map((m) => m.id), - `Message purge by ${pomello(msg.author)} targeting ${pomello(user)}` + `Message purge by ${formatUsername( + msg.author + )} targeting ${formatUsername(user)}` ); return `Deleted ${messages.length} message(s).`; @@ -54,7 +56,7 @@ tidy.callback = async function (msg, line, [subcommand, count, extra]) { }); await msg.channel.deleteMessages( messages.filter((m) => msg.author.bot).map((m) => m.id), - `Message purge by ${pomello(msg.author)} targeting bots` + `Message purge by ${formatUsername(msg.author)} targeting bots` ); return `Deleted ${messages.length} message(s).`; @@ -69,7 +71,7 @@ tidy.callback = async function (msg, line, [subcommand, count, extra]) { }); await msg.channel.deleteMessages( messages.filter((m) => m.content.indexOf(count) > -1).map((m) => m.id), - `Message purge by ${pomello(msg.author)} targeting "${count}"` + `Message purge by ${formatUsername(msg.author)} targeting "${count}"` ); return `Deleted ${messages.length} message(s).`; diff --git a/src/modules/music.js b/src/modules/music.js index 3d34218..9bfb256 100644 --- a/src/modules/music.js +++ b/src/modules/music.js @@ -7,7 +7,7 @@ const Command = require("../lib/command.js"); const { formatTime, parseHtmlEntities, - pomello, + formatUsername, selectionMessage, } = require("../lib/utils.js"); @@ -774,7 +774,7 @@ command.callback = async function ( key: item.id, display: (item.title ?? item.url).substr(0, 100), description: hasManageMessages - ? `Added by: ${pomello(user)}` + ? `Added by: ${formatUsername(user)}` : "", }; }), diff --git a/src/modules/utility.js b/src/modules/utility.js index f55903d..a5b050c 100644 --- a/src/modules/utility.js +++ b/src/modules/utility.js @@ -9,7 +9,7 @@ const { formatTime, hastebin, lookupUser, - pomello, + formatUsername, safeString, } = require("../lib/utils.js"); const {getNamesFromString} = require("../lib/unicode.js"); @@ -366,7 +366,7 @@ avatar.callback = async function (msg, line, [user], {server, guild}) { } const baseEmbed = { - title: `Avatar for \`${pomello(member)}\``, + title: `Avatar for \`${formatUsername(member)}\``, }; const normalAvatar = member.user.avatar; @@ -411,7 +411,7 @@ avatar.callback = async function (msg, line, [user], {server, guild}) { const guild = msg.channel.guild || hf.bot.guilds.get(msg.guildID); const baseEmbed = { - title: `Avatar for \`${pomello(msg.author)}\``, + title: `Avatar for \`${formatUsername(msg.author)}\``, }; const normalAvatar = msg.author.avatar; @@ -512,7 +512,7 @@ banner.callback = async function (msg, line, [user], {server, guild}) { return { embeds: [ { - title: `Banner for \`${pomello(userObj)}\``, + title: `Banner for \`${formatUsername(userObj)}\``, url, image: { url, @@ -580,7 +580,7 @@ lookupinvite.callback = async function (msg, line) { const inviter = invite.inviter ? { name: "Inviter", - value: `**${pomello(invite.inviter)}** (${invite.inviter.id})`, + value: `**${formatUsername(invite.inviter)}** (${invite.inviter.id})`, inline: false, } : null; @@ -865,16 +865,16 @@ flagdump.callback = async function (msg, line, [numOrMention], {id, list}) { if (!user) { return "User not cached."; } else { - return `\`${pomello(user)}\`'s public flags:\n\`\`\`${flagFromInt( + return `\`${formatUsername(user)}\`'s public flags:\n\`\`\`${flagFromInt( user.publicFlags )}\`\`\``; } } else if (!isNaN(num)) { return `\`\`\`\n${flagFromInt(num)}\`\`\``; } else { - return `\`${pomello(msg.author)}\`'s public flags:\n\`\`\`${flagFromInt( - msg.author.publicFlags - )}\`\`\``; + return `\`${formatUsername( + msg.author + )}\`'s public flags:\n\`\`\`${flagFromInt(msg.author.publicFlags)}\`\`\``; } }; hf.registerCommand(flagdump); @@ -1030,7 +1030,8 @@ presence.callback = async function (msg, line) { } if (target) { - if (!target.clientStatus) return `**${pomello(target)}** is offline.`; + if (!target.clientStatus) + return `**${formatUsername(target)}** is offline.`; const icons = []; for (const platform of Object.keys(target.clientStatus)) { @@ -1251,7 +1252,7 @@ presence.callback = async function (msg, line) { } return { - content: `Presence for **${pomello(target)}**: ${icons.join(" ")}`, + content: `Presence for **${formatUsername(target)}**: ${icons.join(" ")}`, embeds, files, }; @@ -1261,4 +1262,52 @@ presence.callback = async function (msg, line) { }; hf.registerCommand(presence); +const POMELO_REGEX = /^[a-z0-9._]{1,32}$/; +const pomelo = new Command("pomelo"); +pomelo.category = CATEGORY; +pomelo.helpText = "Check to see if a username is taken or not"; +pomelo.usage = "[username] <...username>"; +pomelo.callback = async function (msg, line) { + if (!line || line === "") return "Arguments required."; + + const usernames = line.toLowerCase().split(" "); + + if (usernames.length == 1) { + const name = usernames[0]; + if (name.length > 32 || !POMELO_REGEX.test(name)) + return {reaction: "\u{1f6ab}"}; + + const res = await hf.bot.requestHandler.request( + "POST", + "/unique-username/username-attempt-unauthed", + false, + {username: name} + ); + return {reaction: res.taken ? "\u274c" : "\u2705"}; + } else { + const lines = []; + + for (const name of usernames) { + if (name.length > 32 || !POMELO_REGEX.test(name)) { + lines.push(`\u{1f6ab} \`${name}\``); + } else { + try { + const res = await hf.bot.requestHandler.request( + "POST", + "/unique-username/username-attempt-unauthed", + false, + {username: name} + ); + lines.push(`${res.taken ? "\u274c" : "\u2705"} \`${name}\``); + } catch { + lines.push(`\u26a0\ufe0f \`${name}\``); + } + } + } + + return lines.join("\n"); + } +}; +hf.registerCommand(pomelo); + // }}}