diff --git a/.eslintrc.js b/.eslintrc.js index 7a87e3a..1b81e6f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -27,5 +27,6 @@ module.exports = { }, globals: { hf: true, + BigInt: true, // lol eslint }, }; diff --git a/src/modules/utility.js b/src/modules/utility.js index 4ed220f..59a420f 100644 --- a/src/modules/utility.js +++ b/src/modules/utility.js @@ -236,3 +236,61 @@ snowflake.callback = function (msg, line) { } }; hf.registerCommand(snowflake); + +const USER_FLAGS = [ + "STAFF", + "PARTNER", + "HYPESQUAD", + "BUG_HUNTER_LEVEL_1", + "MFA_SMS", + "PREMIUM_PROMO_DISMISSED", + "HYPESQUAD_ONLINE_HOUSE_1", + "HYPESQUAD_ONLINE_HOUSE_2", + "HYPESQUAD_ONLINE_HOUSE_3", + "PREMIUM_EARLY_SUPPORTER", + "TEAM_PSEUDO_USER", + "", + "SYSTEM", + "HAS_UNREAD_URGENT_MESSAGES", + "BUG_HUNTER_LEVEL_2", + "UNDERAGE_DELETED", + "VERIFIED_BOT", + "VERIFIED_DEVELOPER", + "CERTIFIED_MODERATOR", +]; + +const flagdump = new Command("flagdump"); +flagdump.category = CATEGORY; +flagdump.helpText = "Dumps Discord user flags."; +flagdump.usage = "[flags]"; +flagdump.callback = function (msg, line) { + const num = parseInt(line); + if (!isNaN(num)) { + const bits = num.toString(2); + const splitBits = bits.split("").reverse(); + + const reassignedBits = {}; + + for (const shift in splitBits) { + reassignedBits[shift] = splitBits[shift]; + } + + const flags = Object.keys(reassignedBits).filter( + (bit) => reassignedBits[bit] == 1 + ); + + let out = "```\n"; + + for (const flag of flags) { + out += + (USER_FLAGS[flag] || "") + + ` (1 << ${flag}, ${1n << BigInt(flag)})\n`; + } + out += "```"; + + return out; + } else { + return "Argument provided is not a number."; + } +}; +hf.registerCommand(flagdump);