diff --git a/commands/message/info/guild.js b/commands/message/info/guild.js index f554721..f20ff8f 100644 --- a/commands/message/info/guild.js +++ b/commands/message/info/guild.js @@ -1,5 +1,6 @@ const { GUILD_FEATURES } = require("../../../labscore/constants"); const { createEmbed } = require("../../../labscore/utils/embed"); +const { guildFeaturesField } = require("../../../labscore/utils/fields"); const { icon, highlight, timestamp, codeblock } = require("../../../labscore/utils/markdown"); const { editOrReply } = require("../../../labscore/utils/message"); @@ -67,33 +68,16 @@ module.exports = { }) // Guild Features - if(g.features.length >= 1){ + // Create an empty field so everything properly aligns on desktop guildCard.fields.push({ name: `​`, value: `​`, inline: true }) - guildFeatures = g.features.sort((a, b) => a.normalize().localeCompare(b.normalize())); - let featureCards = [] - while(guildFeatures.length){ - ff = guildFeatures.splice(0, 10) - let f = []; - for(const feat of ff){ - if(GUILD_FEATURES[feat]){ - f.push(GUILD_FEATURES[feat]) - } else { - f.push(`<:UNKNOWN:878298902971965520> ${feat}`) - } - } - featureCards.push({ - name: `​`, - value: f.join('\n'), - inline: true - }) - } + let featureCards = guildFeaturesField(g) featureCards[0].name = `${icon("activity")} Guild Features` guildCard.fields = guildCard.fields.concat(featureCards) diff --git a/commands/message/info/invite.js b/commands/message/info/invite.js index 8b2ca7a..40b6834 100644 --- a/commands/message/info/invite.js +++ b/commands/message/info/invite.js @@ -1,5 +1,5 @@ -const { GUILD_FEATURES } = require("../../../labscore/constants"); const { createEmbed } = require("../../../labscore/utils/embed"); +const { guildFeaturesField } = require("../../../labscore/utils/fields"); const { icon, highlight, timestamp, codeblock } = require("../../../labscore/utils/markdown"); const { editOrReply } = require("../../../labscore/utils/message"); @@ -31,25 +31,7 @@ module.exports = { // Guild Features if(g.features.length >= 1){ - guildFeatures = g.features.sort((a, b) => a.normalize().localeCompare(b.normalize())); - - let featureCards = [] - while(guildFeatures.length){ - ff = guildFeatures.splice(0, 10) - let f = []; - for(const feat of ff){ - if(GUILD_FEATURES[feat]){ - f.push(GUILD_FEATURES[feat]) - } else { - f.push(`<:UNKNOWN:878298902971965520> ${feat}`) - } - } - featureCards.push({ - name: `​`, - value: f.join('\n'), - inline: true - }) - } + let featureCards = guildFeaturesField(g) featureCards[0].name = `${icon("activity")} Guild Features` inviteCard.fields = inviteCard.fields.concat(featureCards) @@ -57,6 +39,7 @@ module.exports = { return editOrReply(context, inviteCard) }catch(e){ + console.log(e) return editOrReply(context, createEmbed("error", context, "Unable to fetch invite link.")) } }, diff --git a/labscore/constants.js b/labscore/constants.js index 1c2bb82..b9a1bf5 100644 --- a/labscore/constants.js +++ b/labscore/constants.js @@ -75,58 +75,239 @@ module.exports.ICONS = Object.freeze({ "link": "<:ico_link:994364481792647229>" }) +const GUILD_FEATURE_ICONS = Object.freeze({ + ACTIVITY: "<:activity:995078510492266606>", + AUDIO: "<:audio:995073876381945986>", + ANIMATED: "<:animated:995034549895569519> ", + IMAGE: "<:image:995034797112041563>", + DIRECTORY: "<:directory:995069080467939329>", + EMOJI: "<:emoji:995036031923539979>", + EDUCATION: "<:education:995069345577312266>", + BOOST: "<:boost:995068901794783234>", + STAFF: "<:staff:995068645430534174>", + HOME: "<:home:995068501192622150>", + MOD: "<:mod:995068318161575957>", + ROLE_SUBSCRIPTIONS: "<:rolesubs:995071222071181444>", + STAR: "<:star:995071826373910568>", + STICKER: "<:sticker:995072116405842040>", + ROLE_ICONS: "<:roleicons:995072431695863819>", + VERIFIED: "<:verified:995073342350577674>", + PARTNER: "<:partner:995073343554338867>", + WALLET: "<:wallet:995075115681329213>", + TAG: "<:tag:995075110660751370>", + TICKET: "<:ticket:995075114372694016>", + THREAD: "<:thread:995075113030529065>", + PRIVATE_THREAD: "<:privatethread:995075107712143410>", + CLOCK: "<:clock:995075106328035519>", + EYE: "<:eye:995076484555345920>", + EYE_HIDDEN: "<:eyehidden:995076486832857219>", + GLOBE: "<:globe:995076489542377623>", + MEGAPHONE: "<:mega:995076487789154396>", + DISCOVERY: "<:discovery:995077771619471480>", + DISCOVERY_DISABLED: "<:discoveryoff:995077769836888116>", + DISCOVERY_ENABLED: "<:discoveryon:995077768029155480>", + WAVE: "<:wave:995079620468670554>", + PROFILE: "<:profile:995080477734088855>", + MESSAGE: "<:message:995080756021952594>", + BOT_DEVELOPER: "<:botdev:995081351457935391>", + PEOPLE_RED: "<:peoplered:995081367098499103>" +}) + module.exports.GUILD_FEATURES = Object.freeze({ - "MEMBER_VERIFICATION_GATE_ENABLED": "<:MEMBERSHIP_GATING:816573784819630100> Membership Screening Enabled", - "INVITE_SPLASH": "<:BOOST_IMAGE:816574652780249108> Invite Splash Background", - "BANNER": "<:BOOST_IMAGE:816574652780249108> Guild Banner", - "ANIMATED_ICON": "<:BOOST_GIF:816575965559914516> Animated Server Icon", - "VANITY_URL": "<:BOOST_STAR:816575966498258974> Vanity Url", - "MEMBER_LIST_DISABLED": "<:MEMBERLISTDISABLED:816582167287169094> Member List Disabled", - "PARTNERED": "<:PARTNERED:816581753472155648> Partnered Server", - "VERIFIED": "<:VERIFIED:816581753358909440> Verified Server", - "PREVIEW_ENABLED": "<:PREVIEW_ENABLED:819472065986953266> Preview Enabled", - "RELAY_ENABLED": "<:PEOPLE:816579869168893962> Relay Enabled", - "WELCOME_SCREEN_ENABLED": "<:WELCOME:816581124125097994> Welcome Screen", - "FORCE_RELAY": "<:PEOPLE:816579869168893962> Forced Relay Enabled", - "DISCOVERABLE_DISABLED": "<:PUBLIC_DISABLED:839197973958623272> Discovery Disabled", - "ENABLED_DISCOVERABLE_BEFORE": "<:DISCOVERY:816577881647087617> Old Discovery Enabled", - "DISCOVERABLE": "<:DISCOVERY:816577881647087617> Discovery Enabled", - "COMMUNITY": "<:COMMUNITY:816577159924678676> Community Server", - "COMMERCE": "<:COMMERCE:816577415227899914> Store Channels", - "NEWS": "<:NEWS:816583763731152896> Announcement Channels", - "VIP_REGIONS": "<:BOOST_VOICE:816575966452252723> 384kbps Bitrate", - "MORE_EMOJI": "<:BOOST_EMOJI:816575966666948619> More Emoji Slots", - "FEATURABLE": "<:DISCOVERY:816577881647087617> Available on Featured Discovery", - "MORE_STICKERS": "<:MORE_STICKERS:878297552863260742> More Sticker Slots", - "MONETIZATION_ENABLED": "<:MONETIZATION_ENABLED:850454393386958928> Server Monetization Enabled", - "TICKETED_EVENTS_ENABLED": "<:TICKETED_STAGES_ENABLED:850454393530875944> Ticketed Stages Enabled", - "SEVEN_DAY_THREAD_ARCHIVE": "<:THREAD_ARCHIVING:878297227729174568> 7 Day Thread Archiving", - "THREE_DAY_THREAD_ARCHIVE": "<:THREAD_ARCHIVING:878297227729174568> 3 Day Thread Archiving", - "PRIVATE_THREADS": "<:PRIVATE_THREADS:878297227729174569> Private Threads", - "THREADS_ENABLED_TESTING": "<:thread:994365140617154692> Threads Testing Enabled", - "THREADS_ENABLED": "<:thread:994365140617154692> Threads Enabled", - "NEW_THREAD_PERMISSIONS": "<:thread:994365140617154692> New Thread Permissions Enabled", - "ROLE_ICONS": "<:ROLE_ICONS:878297142022795275> Role Icons", - "ROLE_SUBSCRIPTIONS_ENABLED": "<:ROLE_SUBSCRIPTIONS_ENABLED:888440487101485116> Role Subscriptions Enabled", - "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE": "<:ROLE_SUBSCRIPTIONS_ENABLED:888440487101485116> Role Subscriptions Available for Purchase", - "PREMIUM_TIER_3_OVERRIDE": "<:lc_boosting:699936318398136341> Forced Boosting Level 3", - "TEXT_IN_VOICE_ENABLED": "<:TEXT_IN_VOICE_ENABLED:903643253033803796> Voice Channel Text Chat Enabled", - "MEMBER_PROFILES": "<:MEMBER_PROFILES:903643209517907988> Member Profiles", - "ANIMATED_BANNER": "<:BOOST_GIF:816575965559914516> Animated Banner", - "INTERNAL_EMPLOYEE_ONLY": "<:badge_staff:903276633161609246> Internal Employee Server", - "CHANNEL_BANNER": "<:BOOST_IMAGE:816574652780249108> Channel Banners", - "HUB": "<:HUB:915365729447063632> School Hub", - "HAS_DIRECTORY_ENTRY": "<:DIRECTORY:915365390836695040> Linked to School Hub", - "EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT": "<:ACTIVITY_FEATURE:937826423337529354> Exposed to Activities WTP Experiment", - "EXPOSED_TO_BOOSTING_TIERS_EXPERIMENT": "<:lc_boosting:699936318398136341> Exposed to Activities Boosting Tier Experiment", - "HAD_EARLY_ACTIVITIES_ACCESS": "<:ACTIVITY_FEATURE:937826423337529354> Had Activities Early Access", - "THREAD_DEFAULT_AUTO_ARCHIVE_DURATION": "<:TEXT_IN_VOICE_ENABLED:903643253033803796> Thread Default Auto Archive Duration", - "AUTO_MODERATION": "<:lc_icon_mod:704269746312446013> Auto Moderation", - "CREATOR_MONETIZABLE": "<:MONETIZATION_ENABLED:850454393386958928> Creator Monetizable", - "CREATOR_MONETIZABLE_DISABLED": "<:MONETIZATION_ENABLED:850454393386958928> Creator Monetizable Disabled", - "BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD": "<:lc_boosting:699936318398136341> Boosting Tiers Experiment Small Guild", - "BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD": "<:lc_boosting:699936318398136341> Boosting Tiers Experiment Medium Guild", - "BOT_DEVELOPER_EARLY_ACCESS": "<:i:903276631173509130> Forum Channels Early Access" + "ANIMATED_BANNER": { + "icon": GUILD_FEATURE_ICONS.ANIMATED + }, + "ANIMATED_ICON": { + "icon": GUILD_FEATURE_ICONS.ANIMATED + }, + "AUTO_MODERATION": { + "icon": GUILD_FEATURE_ICONS.MOD + }, + "BANNER": { + "icon": GUILD_FEATURE_ICONS.IMAGE, + "name": "Server Banner" + }, + "BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD": { + "icon": GUILD_FEATURE_ICONS.BOOST + }, + "BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD": { + "icon": GUILD_FEATURE_ICONS.BOOST + }, + "BOT_DEVELOPER_EARLY_ACCESS": { + "icon": GUILD_FEATURE_ICONS.BOT_DEVELOPER, + "name": "Bot Developer Testing" + }, + "CHANNEL_BANNER": { + "icon": GUILD_FEATURE_ICONS.IMAGE, + "name": "Channel Banners" + }, + "COMMERCE": { + "icon": GUILD_FEATURE_ICONS.TAG, + "name": "Store Channels" + }, + "COMMUNITY": { + "icon": GUILD_FEATURE_ICONS.GLOBE + }, + "CREATOR_MONETIZABLE": { + "icon": GUILD_FEATURE_ICONS.WALLET + }, + "CREATOR_MONETIZABLE_DISABLED": { + "icon": GUILD_FEATURE_ICONS.WALLET + }, + "DISCOVERABLE": { + "icon": GUILD_FEATURE_ICONS.DISCOVERY_ENABLED, + "name": "Discovery" + }, + "DISCOVERABLE_DISABLED": { + "icon": GUILD_FEATURE_ICONS.DISCOVERY_DISABLED, + "name": "Discovery Disabled" + }, + "ENABLED_DISCOVERABLE_BEFORE": { + "icon": GUILD_FEATURE_ICONS.DISCOVERY, + "name": "Has been in Discovery" + }, + "EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT": { + "icon": GUILD_FEATURE_ICONS.ACTIVITY + }, + "EXPOSED_TO_BOOSTING_TIERS_EXPERIMENT": { + "icon": GUILD_FEATURE_ICONS.BOOST + }, + "FEATURABLE": { + "icon": GUILD_FEATURE_ICONS.STAR + }, + "FORCE_RELAY": { + "icon": "🏃💨", + "name": "Relay Force Enabled" + }, + "GUILD_HOME_TEST": { + "icon": GUILD_FEATURE_ICONS.HOME + }, + "HAD_EARLY_ACTIVITIES_ACCESS": { + "icon": GUILD_FEATURE_ICONS.ACTIVITY + }, + "HAS_DIRECTORY_ENTRY": { + "icon": GUILD_FEATURE_ICONS.DIRECTORY + }, + "HUB": { + "icon": GUILD_FEATURE_ICONS.EDUCATION, + "name": "School Hub" + }, + "INTERNAL_EMPLOYEE_ONLY": { + "icon": GUILD_FEATURE_ICONS.STAFF, + "name": "Internal Employee Server" + }, + "INVITE_SPLASH": { + "icon": GUILD_FEATURE_ICONS.IMAGE + }, + "LINKED_TO_HUB": { + "icon": GUILD_FEATURE_ICONS.DIRECTORY + }, + "MEMBER_PROFILES": { + "icon": GUILD_FEATURE_ICONS.PROFILE + }, + "MEMBER_VERIFICATION_GATE_ENABLED": { + "icon": GUILD_FEATURE_ICONS.WAVE, + "name": "Membership Screening" + }, + "MONETIZATION_ENABLED": { + "icon": GUILD_FEATURE_ICONS.WALLET + }, + "MORE_EMOJI": { + "icon": GUILD_FEATURE_ICONS.EMOJI + }, + "MORE_STICKERS": { + "icon": GUILD_FEATURE_ICONS.STICKER + }, + "NEWS": { + "icon": GUILD_FEATURE_ICONS.MEGAPHONE, + "name": "Announcement Channels" + }, + "NEW_THREAD_PERMISSIONS": { + "icon": GUILD_FEATURE_ICONS.THREAD + }, + "PARTNERED": { + "icon": GUILD_FEATURE_ICONS.PARTNER + }, + "PREMIUM_TIER_3_OVERRIDE": { + "icon": GUILD_FEATURE_ICONS.STAFF + }, + "PREVIEW_ENABLED": { + "icon": GUILD_FEATURE_ICONS.EYE + }, + "PRIVATE_THREADS": { + "icon": GUILD_FEATURE_ICONS.PRIVATE_THREAD + }, + "RELAY_ENABLED": { + "icon": "🏃" + }, + "ROLE_ICONS": { + "icon": GUILD_FEATURE_ICONS.ROLE_ICONS + }, + "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE": { + "icon": GUILD_FEATURE_ICONS.ROLE_SUBSCRIPTIONS + }, + "ROLE_SUBSCRIPTIONS_ENABLED": { + "icon": GUILD_FEATURE_ICONS.ROLE_SUBSCRIPTIONS, + "name": "Role Subscriptions" + }, + "SEVEN_DAY_THREAD_ARCHIVE": { + "icon": GUILD_FEATURE_ICONS.CLOCK, + "name": "7 Day Thread Archiving" + }, + "TEXT_IN_VOICE_ENABLED": { + "icon": GUILD_FEATURE_ICONS.MESSAGE, + "name": "Text in Voice" + }, + "THREADS_ENABLED": { + "icon": GUILD_FEATURE_ICONS.THREAD + }, + "THREADS_ENABLED_TESTING": { + "icon": GUILD_FEATURE_ICONS.THREAD, + "name": "Thread Testing Enabled" + }, + "THREAD_DEFAULT_AUTO_ARCHIVE_DURATION": { + "icon": GUILD_FEATURE_ICONS.CLOCK + }, + "THREE_DAY_THREAD_ARCHIVE": { + "icon": GUILD_FEATURE_ICONS.CLOCK, + "name": "3 Day Thread Archiving" + }, + "TICKETED_EVENTS_ENABLED": { + "icon": GUILD_FEATURE_ICONS.TICKET + }, + "VANITY_URL": { + "icon": GUILD_FEATURE_ICONS.STAR, + "name": "Vanity URL" + }, + "VERIFIED": { + "icon": GUILD_FEATURE_ICONS.VERIFIED + }, + "VIP_REGIONS": { + "icon": GUILD_FEATURE_ICONS.AUDIO, + "name": "VIP Regions" + }, + "WELCOME_SCREEN_ENABLED": { + "icon": GUILD_FEATURE_ICONS.WAVE + }, + "LURKABLE": { + "icon": GUILD_FEATURE_ICONS.EYE, + "name": "Lurking Enabled" + }, + "MEMBER_LIST_DISABLED": { + "icon": GUILD_FEATURE_ICONS.PEOPLE_RED + }, + "PUBLIC_DISABLED": { + "icon": GUILD_FEATURE_ICONS.GLOBE + }, + "PUBLIC": { + "icon": GUILD_FEATURE_ICONS.GLOBE + }, + "ROLE_SUBSCRIPTIONS_ENABLED_FOR_PURCHASE": { + "icon": GUILD_FEATURE_ICONS.ROLE_SUBSCRIPTIONS + }, + "TICKETING_ENABLED": { + "icon": GUILD_FEATURE_ICONS.TICKET + } }) module.exports.TIKTOK_VOICES = [ diff --git a/labscore/utils/fields.js b/labscore/utils/fields.js new file mode 100644 index 0000000..afc9cdc --- /dev/null +++ b/labscore/utils/fields.js @@ -0,0 +1,35 @@ +const { GUILD_FEATURES } = require("../constants"); + +module.exports.guildFeaturesField = function(g){ + let featureCards = [] + let fN = []; + let fD = {}; + + for(const feat of g.features.toArray()){ + if(GUILD_FEATURES[feat]){ + let n = feat.replace(/_/g, ' ').toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ') + if(GUILD_FEATURES[feat].name) n = GUILD_FEATURES[feat].name + + fN.push(n); + fD[n] = GUILD_FEATURES[feat].icon; + } else { + fN.push(`<:UNKNOWN:878298902971965520> ${feat}`) + } + } + + fN = fN.sort((a, b) => a.normalize().localeCompare(b.normalize())); + while(fN.length){ + sfN = fN.splice(0, 10) + let ft = [] + for(const f of sfN){ + ft.push(`${fD[f]} ${f}`) + } + featureCards.push({ + name: `​`, + value: ft.join('\n'), + inline: true + }) + } + + return featureCards; +} \ No newline at end of file