diff --git a/commands/interaction/context/audio.js b/commands/interaction/context/audio.js index 99c2eba..73400c8 100644 --- a/commands/interaction/context/audio.js +++ b/commands/interaction/context/audio.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { renderMusicButtons } = require('#utils/buttons'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -22,7 +23,7 @@ module.exports = { ], run: async (context, args) => { try{ - await acknowledge(context); + await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]); const { message } = args; diff --git a/commands/interaction/context/ocr.js b/commands/interaction/context/ocr.js index 69b5316..0adc993 100644 --- a/commands/interaction/context/ocr.js +++ b/commands/interaction/context/ocr.js @@ -1,5 +1,5 @@ const { googleVisionOcr, googleTranslate } = require('#api'); -const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES } = require('#constants'); +const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES, PERMISSION_GROUPS } = require('#constants'); const { getMessageAttachment, validateAttachment } = require('#utils/attachment'); const { createEmbed } = require('#utils/embed'); @@ -24,7 +24,7 @@ module.exports = { ], run: async (context, args) => { try{ - await acknowledge(context); + await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]); const { message } = args; diff --git a/commands/interaction/context/reverse-image.js b/commands/interaction/context/reverse-image.js index e1c4e12..08000e6 100644 --- a/commands/interaction/context/reverse-image.js +++ b/commands/interaction/context/reverse-image.js @@ -1,5 +1,6 @@ const { reverseImageSearch } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { getMessageAttachment, validateAttachment } = require('#utils/attachment'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); @@ -46,7 +47,7 @@ module.exports = { ], run: async (context, args) => { try{ - await acknowledge(context); + await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]); const { message } = args; diff --git a/commands/interaction/context/transcribe.js b/commands/interaction/context/transcribe.js index 48a6199..918b3c3 100644 --- a/commands/interaction/context/transcribe.js +++ b/commands/interaction/context/transcribe.js @@ -7,6 +7,7 @@ const { codeblock } = require('#utils/markdown'); const { STATICS } = require('#utils/statics'); const { ApplicationCommandTypes, MessageFlags } = require("detritus-client/lib/constants"); +const { PERMISSION_GROUPS } = require('#constants'); ; module.exports = { @@ -21,7 +22,7 @@ module.exports = { 1 ], run: async (context, args) => { - await acknowledge(context); + await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]); try { const { message } = args; diff --git a/commands/interaction/context/translate.js b/commands/interaction/context/translate.js index 94b99e2..fe7fad3 100644 --- a/commands/interaction/context/translate.js +++ b/commands/interaction/context/translate.js @@ -1,5 +1,5 @@ const { googleTranslate } = require('#api'); -const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES, TRANSLATE_LANGUAGE_MAPPINGS, TRANSLATE_DEFAULT_LANGUAGE_LIST } = require('#constants'); +const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES, TRANSLATE_LANGUAGE_MAPPINGS, TRANSLATE_DEFAULT_LANGUAGE_LIST, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -22,7 +22,7 @@ module.exports = { 1 ], run: async (context, args) => { - await acknowledge(context); + await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]); const { message } = args; diff --git a/commands/interaction/slash/fun/otter.js b/commands/interaction/slash/fun/otter.js index a40ebc6..21284d9 100644 --- a/commands/interaction/slash/fun/otter.js +++ b/commands/interaction/slash/fun/otter.js @@ -1,4 +1,5 @@ const { otter } = require('#api'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -27,7 +28,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ const ott = (await otter()).response.body diff --git a/commands/interaction/slash/info/avatar.js b/commands/interaction/slash/info/avatar.js index 292ee93..9c46221 100644 --- a/commands/interaction/slash/info/avatar.js +++ b/commands/interaction/slash/info/avatar.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); const { editOrReply } = require('#utils/message'); @@ -32,7 +33,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); if(!args.user) return editOrReply(context, createEmbed("default", context, { image: { diff --git a/commands/interaction/slash/info/user.js b/commands/interaction/slash/info/user.js index fba4e67..107d107 100644 --- a/commands/interaction/slash/info/user.js +++ b/commands/interaction/slash/info/user.js @@ -1,4 +1,4 @@ -const { BADGE_ICONS } = require('#constants'); +const { BADGE_ICONS, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -35,7 +35,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ const { user, member } = args; diff --git a/commands/interaction/slash/search/google-images.js b/commands/interaction/slash/search/google-images.js index 29c1518..ed70eb1 100644 --- a/commands/interaction/slash/search/google-images.js +++ b/commands/interaction/slash/search/google-images.js @@ -1,5 +1,6 @@ const { googleImages } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -57,7 +58,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try { let search = await googleImages(context, args.query, false) //safesearch is always on diff --git a/commands/interaction/slash/search/google.js b/commands/interaction/slash/search/google.js index d9591aa..ddc6c9e 100644 --- a/commands/interaction/slash/search/google.js +++ b/commands/interaction/slash/search/google.js @@ -1,5 +1,6 @@ const { google } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { format } = require('#utils/ansi'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); @@ -260,7 +261,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ let search = await google(context, args.query, false) // safe search is always on diff --git a/commands/interaction/slash/search/lyrics.js b/commands/interaction/slash/search/lyrics.js index 4d904aa..1a26520 100644 --- a/commands/interaction/slash/search/lyrics.js +++ b/commands/interaction/slash/search/lyrics.js @@ -1,5 +1,6 @@ const { lyrics } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -93,7 +94,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ let search = await lyrics(context, args.query) diff --git a/commands/interaction/slash/search/maps.js b/commands/interaction/slash/search/maps.js index ea32afd..b7fd82f 100644 --- a/commands/interaction/slash/search/maps.js +++ b/commands/interaction/slash/search/maps.js @@ -1,4 +1,5 @@ const { maps, mapsSupplemental } = require('#api'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -7,7 +8,6 @@ const { editOrReply } = require('#utils/message') const { STATICS, STATIC_ASSETS } = require('#utils/statics'); const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants'); -// TODO: Turn this into a general purpose permissions constant const { Components } = require('detritus-client/lib/utils'); function renderPlaceCard(context, place) { @@ -108,7 +108,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try { let search = await maps(context, args.query) diff --git a/commands/interaction/slash/search/urbandictionary.js b/commands/interaction/slash/search/urbandictionary.js index 2932e7c..eca3e76 100644 --- a/commands/interaction/slash/search/urbandictionary.js +++ b/commands/interaction/slash/search/urbandictionary.js @@ -1,5 +1,6 @@ const { urbandictionary } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -7,8 +8,7 @@ const { link, iconPill } = require('#utils/markdown') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions, ApplicationCommandOptionTypes } = require("detritus-client/lib/constants"); +const { ApplicationCommandOptionTypes } = require("detritus-client/lib/constants"); function createUrbanPage(context, result){ let e = createEmbed("default", context, { @@ -64,7 +64,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ let search = await urbandictionary(context, args.term) diff --git a/commands/interaction/slash/search/wolfram-alpha.js b/commands/interaction/slash/search/wolfram-alpha.js index edc1542..b8187fd 100644 --- a/commands/interaction/slash/search/wolfram-alpha.js +++ b/commands/interaction/slash/search/wolfram-alpha.js @@ -1,5 +1,6 @@ const { wolframAlpha } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -67,7 +68,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try { let search = await wolframAlpha(context, args.query) diff --git a/commands/interaction/slash/search/xkcd.js b/commands/interaction/slash/search/xkcd.js index 983ff19..cc0b3b6 100644 --- a/commands/interaction/slash/search/xkcd.js +++ b/commands/interaction/slash/search/xkcd.js @@ -1,4 +1,5 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -35,7 +36,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); if(!isNaN(parseInt(args.query))){ try{ diff --git a/commands/interaction/slash/search/youtube.js b/commands/interaction/slash/search/youtube.js index fb1d25d..91f3265 100644 --- a/commands/interaction/slash/search/youtube.js +++ b/commands/interaction/slash/search/youtube.js @@ -1,6 +1,6 @@ const { youtube } = require('#api'); const { paginator } = require('#client'); -const { YOUTUBE_CATEGORIES } = require('#constants'); +const { YOUTUBE_CATEGORIES, PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -180,7 +180,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ if(!args.type) args.type="all" diff --git a/commands/interaction/slash/utils/dictionary.js b/commands/interaction/slash/utils/dictionary.js index bf3b217..b8eda83 100644 --- a/commands/interaction/slash/utils/dictionary.js +++ b/commands/interaction/slash/utils/dictionary.js @@ -1,6 +1,6 @@ const { dictionary } = require('#api'); const { paginator } = require('#client'); -const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES } = require('#constants'); +const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES, PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -76,7 +76,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ let search = await dictionary(context, args.term, "en") diff --git a/commands/interaction/slash/utils/emoji.js b/commands/interaction/slash/utils/emoji.js index 4f6c5b4..f8b0a45 100644 --- a/commands/interaction/slash/utils/emoji.js +++ b/commands/interaction/slash/utils/emoji.js @@ -11,6 +11,7 @@ const { ingest } = require("#logging"); const { Utils } = require("detritus-client"); const { InteractionCallbackTypes, ApplicationCommandOptionTypes, DiscordRegexNames } = require("detritus-client/lib/constants"); const { Components, Snowflake } = require("detritus-client/lib/utils"); +const { PERMISSION_GROUPS } = require("#constants"); const onlyEmoji = require('emoji-aware').onlyEmoji; @@ -64,7 +65,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); const { matches } = Utils.regex( DiscordRegexNames.EMOJI, diff --git a/commands/interaction/slash/utils/emojipedia.js b/commands/interaction/slash/utils/emojipedia.js index 398fc5b..fc79c68 100644 --- a/commands/interaction/slash/utils/emojipedia.js +++ b/commands/interaction/slash/utils/emojipedia.js @@ -8,6 +8,7 @@ const { STATICS, STATIC_ASSETS } = require("#utils/statics"); const { Components } = require("detritus-client/lib/utils"); const { InteractionCallbackTypes, MessageComponentButtonStyles, ApplicationCommandOptionTypes } = require("detritus-client/lib/constants"); const { acknowledge } = require("#utils/interactions"); +const { PERMISSION_GROUPS } = require("#constants"); const onlyEmoji = require('emoji-aware').onlyEmoji; @@ -59,7 +60,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); const emoji = onlyEmoji(args.emoji) if(!emoji){ diff --git a/commands/interaction/slash/utils/music-platforms.js b/commands/interaction/slash/utils/music-platforms.js index afefc53..23f10ba 100644 --- a/commands/interaction/slash/utils/music-platforms.js +++ b/commands/interaction/slash/utils/music-platforms.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { renderMusicButtons } = require('#utils/buttons'); const { createEmbed } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -37,7 +38,7 @@ module.exports = { ], run: async (context, args) => { try{ - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); let urls = args.url.match(urlr) if(urls){ diff --git a/commands/interaction/slash/utils/ocr.js b/commands/interaction/slash/utils/ocr.js index fd094cc..e700128 100644 --- a/commands/interaction/slash/utils/ocr.js +++ b/commands/interaction/slash/utils/ocr.js @@ -1,4 +1,5 @@ const { googleVisionOcr } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { validateAttachment } = require("#utils/attachment"); const { createEmbed } = require("#utils/embed"); @@ -36,7 +37,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); if(!validateAttachment(args.image, "image")) return await editOrReply(context, createEmbed("warning", context, "Unsupported attachment type.")) diff --git a/commands/interaction/slash/utils/reverse-image.js b/commands/interaction/slash/utils/reverse-image.js index be08718..007a98b 100644 --- a/commands/interaction/slash/utils/reverse-image.js +++ b/commands/interaction/slash/utils/reverse-image.js @@ -1,5 +1,6 @@ const { reverseImageSearch } = require("#api"); const { paginator } = require("#client"); +const { PERMISSION_GROUPS } = require("#constants"); const { validateAttachment } = require("#utils/attachment"); const { createEmbed, formatPaginationEmbeds, page } = require("#utils/embed"); @@ -55,7 +56,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); if(!validateAttachment(args.image, "image")) return await editOrReply(context, createEmbed("warning", context, "Unsupported attachment type.")) diff --git a/commands/interaction/slash/utils/screenshot.js b/commands/interaction/slash/utils/screenshot.js index 3d26659..c8b7c3e 100644 --- a/commands/interaction/slash/utils/screenshot.js +++ b/commands/interaction/slash/utils/screenshot.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require("#constants"); const { WebUtilsWebPageScreenshot} = require("#obelisk"); const { createEmbed } = require("#utils/embed"); @@ -33,7 +34,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash, PERMISSION_GROUPS.attachments]); await editOrReply(context, createEmbed("loading", context, `Creating website screenshot...`)) diff --git a/commands/interaction/slash/utils/translate.js b/commands/interaction/slash/utils/translate.js index fe133c9..2b16e65 100644 --- a/commands/interaction/slash/utils/translate.js +++ b/commands/interaction/slash/utils/translate.js @@ -1,5 +1,5 @@ const { googleTranslate } = require('#api'); -const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS } = require('#constants'); +const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { codeblock, icon, pill, stringwrap } = require('#utils/markdown'); @@ -51,7 +51,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); if(!args.to) args.to = "en"; if(!args.from) args.from = "auto"; diff --git a/commands/interaction/slash/utils/weather.js b/commands/interaction/slash/utils/weather.js index 0131863..27cc363 100644 --- a/commands/interaction/slash/utils/weather.js +++ b/commands/interaction/slash/utils/weather.js @@ -1,5 +1,6 @@ const { darksky } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, page } = require('#utils/embed'); const { acknowledge } = require('#utils/interactions'); @@ -7,7 +8,7 @@ const { pill, iconPill, smallPill, weatherIcon, timestamp, icon, link, stringwra const { editOrReply } = require('#utils/message'); const { STATICS } = require('#utils/statics'); -const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants'); +const { ApplicationCommandOptionTypes, ApplicationIntegrationTypes, InteractionContextTypes } = require('detritus-client/lib/constants'); const modifiers = { "°C": (i)=>i, @@ -94,12 +95,13 @@ module.exports = { name: 'weather', description: 'Check the weather at a location.', contexts: [ - 0, - 1, - 2 + InteractionContextTypes.GUILD, + InteractionContextTypes.PRIVATE_CHANNEL, + InteractionContextTypes.BOT_DM ], integrationTypes: [ - 1 + ApplicationIntegrationTypes.GUILD_INSTALL, + ApplicationIntegrationTypes.USER_INSTALL ], options: [ { @@ -137,7 +139,7 @@ module.exports = { } ], run: async (context, args) => { - await acknowledge(context, args.incognito); + await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]); try{ let data = await darksky(context, args.location) diff --git a/commands/message/core/help.js b/commands/message/core/help.js index aa46602..4d2c880 100644 --- a/commands/message/core/help.js +++ b/commands/message/core/help.js @@ -1,14 +1,11 @@ const { paginator } = require('#client'); -const { DISCORD_INVITES, DEFAULT_PREFIXES } = require('#constants'); +const { DISCORD_INVITES, DEFAULT_PREFIXES, PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { codeblock, icon, link, pill, smallPill, iconPill, stringwrap } = require('#utils/markdown') const { editOrReply } = require('#utils/message'); const { hasFeature } = require('#utils/testing'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function createHelpPage(context, title, contents, descriptions) { return page(createEmbed("default", context, { description: `${title}\n\n` + @@ -131,7 +128,7 @@ module.exports = { category: 'core', usage: 'help []' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { if(await hasFeature(context, "core/help")) categories["limited"] = `${iconPill("stars", "Limited Test Commands")}`; else if (categories["limited"]) delete categories["limited"] diff --git a/commands/message/core/ping.js b/commands/message/core/ping.js index 449c155..ab3722f 100644 --- a/commands/message/core/ping.js +++ b/commands/message/core/ping.js @@ -1,11 +1,9 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { format } = require('#utils/ansi') const { createEmbed } = require('#utils/embed') const { codeblock, icon } = require('#utils/markdown') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { description: 'ping!', name: 'ping', @@ -15,7 +13,7 @@ module.exports = { category: 'core', usage: 'ping' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); ping = await context.client.ping() diff --git a/commands/message/core/privacy.js b/commands/message/core/privacy.js index af89a85..305c01d 100644 --- a/commands/message/core/privacy.js +++ b/commands/message/core/privacy.js @@ -1,12 +1,9 @@ -const { PRIVACY_POLICY_LAST_UPDATE, PRIVACY_POLICY_SECTIONS, DISCORD_INVITES, COLORS, PRIVACY_POLICY_PREVIOUS_REVISION } = require('#constants'); +const { PRIVACY_POLICY_LAST_UPDATE, PRIVACY_POLICY_SECTIONS, DISCORD_INVITES, COLORS, PRIVACY_POLICY_PREVIOUS_REVISION, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { icon, timestamp, link, iconLinkPill } = require('#utils/markdown'); const { editOrReply } = require('#utils/message'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'privacy', metadata: { @@ -15,7 +12,7 @@ module.exports = { category: 'core', usage: 'privacy' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { return await editOrReply(context, createEmbed("default", context, { diff --git a/commands/message/core/shard.js b/commands/message/core/shard.js index f7851c2..751ab2c 100644 --- a/commands/message/core/shard.js +++ b/commands/message/core/shard.js @@ -1,11 +1,9 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { format } = require('#utils/ansi'); const { createEmbed } = require('#utils/embed') const { codeblock } = require('#utils/markdown') const { editOrReply } = require('#utils/message'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'shard', metadata: { @@ -14,7 +12,7 @@ module.exports = { category: 'core', usage: 'shard' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { return await editOrReply(context, createEmbed("default", context, { diff --git a/commands/message/core/stats.js b/commands/message/core/stats.js index 761271a..6869d02 100644 --- a/commands/message/core/stats.js +++ b/commands/message/core/stats.js @@ -1,12 +1,9 @@ -const { OPEN_SOURCE_REPOSITORY_URL } = require('#constants'); +const { OPEN_SOURCE_REPOSITORY_URL, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { highlight, iconPill, iconLinkPill } = require('#utils/markdown'); const { editOrReply } = require('#utils/message'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require("superagent"); // TODO: Move this into utils @@ -34,7 +31,7 @@ module.exports = { category: 'core', usage: 'stats' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); try{ diff --git a/commands/message/core/undo.js b/commands/message/core/undo.js index 4b0f347..9a28366 100644 --- a/commands/message/core/undo.js +++ b/commands/message/core/undo.js @@ -1,9 +1,7 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'undo', default: 1, @@ -15,7 +13,7 @@ module.exports = { category: 'core', usage: 'undo []' }, - permissionsClient: [Permissions.SEND_MESSAGES, Permissions.EMBED_LINKS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { try{ if(typeof(args.amount) == "string") args.amount = parseInt(args.amount) diff --git a/commands/message/dev/mapstest.js b/commands/message/dev/mapstest.js deleted file mode 100644 index 2e1363a..0000000 --- a/commands/message/dev/mapstest.js +++ /dev/null @@ -1,159 +0,0 @@ -const { editOrReply } = require("#utils/message"); -const { Components } = require("detritus-client/lib/utils"); - -module.exports = { - label: "text", - name: "mapstest", - metadata: { - description: 'speak.', - description_short: 'speak', - examples: ['say hug'], - category: 'dev', - usage: 'say ' - }, - onBefore: context => context.user.isClientOwner, - onCancel: ()=>{}, - run: async (context, args) => { - await context.triggerTyping(); - - let component = new Components(); - - let row0 = component.addActionRow({ - custom_id: "r0" - }); - row0.addButton({ - custom_id: "s00", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - row0.addButton({ - custom_id: "s01", - disabled: false, - emoji: "<:up:1264344081572565102>", - style: 1 - }) - - row0.addButton({ - custom_id: "s02", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - row0.addButton({ - custom_id: "s03", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - row0.addButton({ - custom_id: "s04", - disabled: true, - emoji: "<:ico_door_white:1264348023916466176>", - style: 4 - }) - - - row0.addButton({ - custom_id: "s10", - disabled: false, - emoji: "<:left:1264344064103284846>", - style: 1 - }) - - row0.addButton({ - custom_id: "s11", - disabled: false, - emoji: "<:ico_pegman_down:1264344115785502802>", - style: 3 - }) - - row0.addButton({ - custom_id: "s12", - disabled: false, - emoji: "<:right:1264344072257015830>", - style: 1 - }) - - - - row0.addButton({ - custom_id: "s13", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - row0.addButton({ - custom_id: "s14", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - - row0.addButton({ - custom_id: "s20", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - row0.addButton({ - custom_id: "s21", - disabled: false, - emoji: "<:down:1264344051751059479>", - style: 1 - }) - - row0.addButton({ - custom_id: "s22", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - - row0.addButton({ - custom_id: "s23", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - row0.addButton({ - custom_id: "s24", - disabled: true, - emoji: "<:empty:749601069298090034>", - style: 2 - }) - - - - console.log(JSON.stringify(component)) - - editOrReply(context, { - embeds: [ - { - author: { - name: "New York Stock Exchange, NYC", - iconUrl: "https://bignutty.gitlab.io/webstorage4/v2/assets/brands/maps.png" - }, - image: { - url: "https://cdn.discordapp.com/attachments/415951527258095616/1264345049215275080/9k.png?ex=669d8896&is=669c3716&hm=a3f0a1b025fd75f47e144e7a9e3161242634dfcd1d76825f1e82deeb0269f30a&" - } - } - ], - components: component - }) - } -}; \ No newline at end of file diff --git a/commands/message/fun/art.js b/commands/message/fun/art.js index a614f3a..4831e4b 100644 --- a/commands/message/fun/art.js +++ b/commands/message/fun/art.js @@ -1,12 +1,9 @@ -const { DEFAULT_PREFIXES } = require('#constants'); +const { DEFAULT_PREFIXES, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { codeblock } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent'); const SIZES = Object.freeze({ @@ -36,7 +33,7 @@ module.exports = { { name: 'variance', default: '', required: false, help: "Variance (1000-9999)" }, { name: 'rotate', default: '', required: false, help: "Rotation amount (0-360)" } ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { await editOrReply(context, createEmbed("loading", context, `Generating image...`)) try{ diff --git a/commands/message/fun/art2.js b/commands/message/fun/art2.js deleted file mode 100644 index e032b7d..0000000 --- a/commands/message/fun/art2.js +++ /dev/null @@ -1,73 +0,0 @@ -const { createEmbed } = require('#utils/embed') -const { editOrReply } = require('#utils/message') - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - -const APPS = [ - "appcode", - "aqua", - "big-data-tools", - "clion", - "cwm", - "datagrip", - "datalore", - "dataspell", - "dotcover", - "dotmemory", - "dotpeek", - "dottrace", - "fleet", - "gateway", - "goland", - "grazie", - "hub", - "intellij-idea", - "intellij-idea-community", - "intellij-idea-edu", - "intellij-rust", - "jetbrains", - "jb-academy", - "kotlin", - "license-vault", - "marketplace", - "mono", - "mps", - "phpstorm", - "pycharm", - "pycharm-community", - "pycharm-edu", - "qa-tools", - "qodana", - "resharper", - "resharper-cpp", - "rider", - "riderflow", - "rubymine", - "space", - "teamcity", - "toolbox", - "upsource", - "webstorm", - "youtrack", -] - -module.exports = { - name: 'art2', - aliases: ['wallpaper2'], - metadata: { - description: 'Returns a random colorful wallpaper from JetBrains Eidos.', - description_short: 'AI wallpapers', - category: 'fun', - usage: `art2` - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], - run: async (context) => { - context.triggerTyping(); - return editOrReply(context, createEmbed("default", context, { - image: { - url: `https://resources.jetbrains.com/cai/eidos_231/${APPS[Math.floor(Math.random()*APPS.length)]}/${Math.floor(1 + Math.random()*999)}.png` - } - })) - } -}; \ No newline at end of file diff --git a/commands/message/fun/garfield.js b/commands/message/fun/garfield.js index 607412a..5a616f0 100644 --- a/commands/message/fun/garfield.js +++ b/commands/message/fun/garfield.js @@ -1,13 +1,10 @@ const { garfield } = require('#api'); -const { FUNNY_CAT_ICONS } = require('#constants'); +const { FUNNY_CAT_ICONS, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { timestamp } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'garfield', aliases: ['garf'], @@ -17,7 +14,7 @@ module.exports = { category: 'fun', usage: `garfield` }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); diff --git a/commands/message/fun/inspire.js b/commands/message/fun/inspire.js index fc69cd9..bd8efe8 100644 --- a/commands/message/fun/inspire.js +++ b/commands/message/fun/inspire.js @@ -1,10 +1,8 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { editOrReply } = require('#utils/message'); const { STATICS } = require('#utils/statics'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent'); module.exports = { @@ -16,7 +14,7 @@ module.exports = { category: 'fun', usage: `inspire` }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { await context.triggerTyping(); try { diff --git a/commands/message/fun/otter.js b/commands/message/fun/otter.js index 0aba9e5..52cd453 100644 --- a/commands/message/fun/otter.js +++ b/commands/message/fun/otter.js @@ -1,11 +1,9 @@ const { otter } = require('#api'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'otter', metadata: { @@ -15,7 +13,7 @@ module.exports = { usage: `otter`, slashCommand: "otter" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { await context.triggerTyping(); try{ diff --git a/commands/message/genai/ask.js b/commands/message/genai/ask.js index db049d8..0495470 100644 --- a/commands/message/genai/ask.js +++ b/commands/message/genai/ask.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { webAsk } = require('#obelisk'); const { createEmbed } = require('#utils/embed') @@ -6,9 +7,6 @@ const { editOrReply } = require('#utils/message') const { STATIC_ICONS } = require('#utils/statics'); const { hasFeature } = require('#utils/testing'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // TODO: general purpose constant? const URL_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([^> \n]*)/ @@ -22,7 +20,7 @@ module.exports = { category: 'limited', usage: 'ask ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { if(!await hasFeature(context, "flamingo/summary")) return; context.triggerTyping(); diff --git a/commands/message/genai/emogen.js b/commands/message/genai/emogen.js index 6cd9538..b946dd3 100644 --- a/commands/message/genai/emogen.js +++ b/commands/message/genai/emogen.js @@ -1,13 +1,11 @@ const { emogen } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { createEmbed } = require("#utils/embed"); const { iconPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { hasFeature } = require("#utils/testing"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'emogen', label: 'text', @@ -21,7 +19,7 @@ module.exports = { args: [ { name: 'style', default: 'microsoft', required: false, help: "Emogen Style" } ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/imagen")) return; context.triggerTyping(); diff --git a/commands/message/genai/gemini-pro.js b/commands/message/genai/gemini-pro.js index bc837b2..2caa17e 100644 --- a/commands/message/genai/gemini-pro.js +++ b/commands/message/genai/gemini-pro.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require("#constants"); const { LlmModelsGenerate } = require("#obelisk"); const { createEmbed } = require("#utils/embed"); @@ -6,9 +7,6 @@ const { editOrReply } = require("#utils/message"); const { STATIC_ICONS } = require("#utils/statics"); const { hasFeature } = require("#utils/testing"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'gemini-pro', label: 'text', @@ -20,7 +18,7 @@ module.exports = { category: 'limited', usage: 'gemini-pro ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/gemini/text")) return; context.triggerTyping(); diff --git a/commands/message/genai/gemini-vision.js b/commands/message/genai/gemini-vision.js index 850282c..85140ee 100644 --- a/commands/message/genai/gemini-vision.js +++ b/commands/message/genai/gemini-vision.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require("#constants"); const { geminiVision } = require("#obelisk"); const { getRecentImage } = require("#utils/attachment"); @@ -7,9 +8,6 @@ const { editOrReply } = require("#utils/message"); const { STATIC_ICONS } = require("#utils/statics"); const { hasFeature } = require("#utils/testing"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'gemini-vision', label: 'text', @@ -21,7 +19,7 @@ module.exports = { category: 'limited', usage: 'gemini-vision ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/gemini/vision")) return; context.triggerTyping(); diff --git a/commands/message/genai/gemini.js b/commands/message/genai/gemini.js index e5ebe07..c473b13 100644 --- a/commands/message/genai/gemini.js +++ b/commands/message/genai/gemini.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { LlmPrivateBard } = require('#obelisk'); const { createEmbed } = require('#utils/embed') @@ -6,8 +7,7 @@ const { editOrReply } = require('#utils/message') const { STATIC_ICONS } = require('#utils/statics'); const { hasFeature } = require('#utils/testing'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions, InteractionCallbackTypes } = require("detritus-client/lib/constants"); +const { InteractionCallbackTypes } = require("detritus-client/lib/constants"); const { Components } = require('detritus-client/lib/utils'); module.exports = { @@ -22,7 +22,7 @@ module.exports = { usage: 'gemini ' }, args: [], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/bard")) return; diff --git a/commands/message/genai/gpt.js b/commands/message/genai/gpt.js index 86e91b7..16bbbd2 100644 --- a/commands/message/genai/gpt.js +++ b/commands/message/genai/gpt.js @@ -1,4 +1,5 @@ const { gpt } = require('#api'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { editOrReply } = require('#utils/message') @@ -6,8 +7,6 @@ const { iconPill, stringwrap, smallIconPill } = require('#utils/markdown') const { STATICS, STATIC_ASSETS } = require('#utils/statics'); const { hasFeature } = require('#utils/testing'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); module.exports = { name: 'gpt', @@ -24,7 +23,7 @@ module.exports = { { name: 'prompt', default: '', required: false, help: "The starting system prompt." }, // { name: 'temperature', default: 0.25, required: false, help: "Model temperature." }, ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/gpt")) return; diff --git a/commands/message/genai/imagen.js b/commands/message/genai/imagen.js index df38f6e..dd17af6 100644 --- a/commands/message/genai/imagen.js +++ b/commands/message/genai/imagen.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require("#constants"); const { GenerativeImagesModelsImagen } = require("#obelisk"); const { createEmbed } = require("#utils/embed"); @@ -6,9 +7,6 @@ const { editOrReply } = require("#utils/message"); const { STATIC_ICONS, STATIC_ASSETS } = require("#utils/statics"); const { hasFeature } = require("#utils/testing"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'imagen', label: 'text', @@ -20,7 +18,7 @@ module.exports = { category: 'limited', usage: 'imagen ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/imagen")) return; context.triggerTyping(); diff --git a/commands/message/genai/palm.js b/commands/message/genai/palm.js index 8dbcbbe..9847885 100644 --- a/commands/message/genai/palm.js +++ b/commands/message/genai/palm.js @@ -1,4 +1,5 @@ const { palm2 } = require('#obelisk'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { editOrReply } = require('#utils/message') @@ -6,9 +7,6 @@ const { iconPill, stringwrap, smallIconPill } = require('#utils/markdown') const { STATIC_ICONS } = require('#utils/statics'); const { hasFeature } = require('#utils/testing'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'palm', label: 'text', @@ -24,7 +22,7 @@ module.exports = { { name: 'prompt', default: '', required: false, help: "The starting system prompt." }, { name: 'temperature', default: 0.25, required: false, help: "Model temperature." }, ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/palm")) return; diff --git a/commands/message/genai/summarize.js b/commands/message/genai/summarize.js index 91b9e41..d6c93b7 100644 --- a/commands/message/genai/summarize.js +++ b/commands/message/genai/summarize.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { SparkWebSummarize } = require('#obelisk'); const { createEmbed } = require('#utils/embed') @@ -6,9 +7,6 @@ const { editOrReply } = require('#utils/message') const { STATIC_ICONS } = require('#utils/statics'); const { hasFeature } = require('#utils/testing'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // TODO: general purpose constant? regex util? const URL_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([^> \n]*)/ @@ -23,7 +21,7 @@ module.exports = { category: 'limited', usage: 'summarize' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { if(!await hasFeature(context, "flamingo/summary")) return; context.triggerTyping(); diff --git a/commands/message/genai/wallpaper.js b/commands/message/genai/wallpaper.js index 61d105d..1b84c47 100644 --- a/commands/message/genai/wallpaper.js +++ b/commands/message/genai/wallpaper.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require("#constants"); const { wallpaper } = require("#obelisk"); const { createEmbed } = require("#utils/embed"); @@ -6,9 +7,6 @@ const { editOrReply } = require("#utils/message"); const { STATIC_ICONS, STATIC_ASSETS } = require("#utils/statics"); const { hasFeature } = require("#utils/testing"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'wallpaper', label: 'text', @@ -23,7 +21,7 @@ module.exports = { args: [ { name: 'format', default: 'wide', required: false, help: "Image style (wide, square)." } ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if(!await hasFeature(context, "ai/wallpapers")) return; context.triggerTyping(); diff --git a/commands/message/google/labels.js b/commands/message/google/labels.js index 053e503..414d82b 100644 --- a/commands/message/google/labels.js +++ b/commands/message/google/labels.js @@ -1,4 +1,5 @@ const { googleVisionLabels } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { getRecentImage } = require("#utils/attachment"); const { createEmbed } = require("#utils/embed"); @@ -6,9 +7,6 @@ const { pill, smallPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'labels', metadata: { @@ -17,7 +15,7 @@ module.exports = { category: 'utils', usage: 'labels ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); let image = await getRecentImage(context, 50) diff --git a/commands/message/google/safetylabels.js b/commands/message/google/safetylabels.js index d605829..be38459 100644 --- a/commands/message/google/safetylabels.js +++ b/commands/message/google/safetylabels.js @@ -1,5 +1,5 @@ const { googleVisionSafetyLabels } = require("#api"); -const { GOOGLE_CLOUD_SAFETY_LABELS, GOOGLE_CLOUD_SAFETY_LABELS_NAMES } = require("#constants"); +const { GOOGLE_CLOUD_SAFETY_LABELS, GOOGLE_CLOUD_SAFETY_LABELS_NAMES, PERMISSION_GROUPS } = require("#constants"); const { getRecentImage } = require("#utils/attachment"); const { createEmbed } = require("#utils/embed"); @@ -7,9 +7,6 @@ const { iconPill, smallPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'safetylabels', metadata: { @@ -18,7 +15,7 @@ module.exports = { category: 'utils', usage: 'safetylabels ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); let image = await getRecentImage(context, 50) diff --git a/commands/message/google/transcribe.js b/commands/message/google/transcribe.js index a94b1b9..3fd84d1 100644 --- a/commands/message/google/transcribe.js +++ b/commands/message/google/transcribe.js @@ -1,3 +1,4 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { AudioTranscribe } = require('#obelisk'); const { createEmbed } = require('#utils/embed') @@ -5,9 +6,6 @@ const { codeblock, icon } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'transcribe', aliases: ['tcr'], @@ -18,7 +16,7 @@ module.exports = { usage: 'transcribe', slashCommand: "Transcribe Voice Message" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); if (!context.message.messageReference) return editOrReply(context, createEmbed("warning", context, "You need to reply to a voice message.")) diff --git a/commands/message/image/craiyon.js b/commands/message/image/craiyon.js deleted file mode 100644 index b3c1704..0000000 --- a/commands/message/image/craiyon.js +++ /dev/null @@ -1,72 +0,0 @@ -const { createEmbed } = require("#utils/embed"); -const { editOrReply } = require("#utils/message"); -const { STATICS } = require("#utils/statics"); - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - -const superagent = require('superagent'); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'craiyon', - label: 'query', - metadata: { - description: 'Uses Craiyon to generate four images from a text prompt.', - description_short: 'Craiyon AI image generation', - examples: ['craiyon Otter'], - category: 'image', - usage: 'craiyon ' - }, - ratelimit: { - type: 'guild', - limit: 1, - duration: 5000 - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - await editOrReply(context, createEmbed("loading", context, `Synthesizing images...`)) - - let noticeTimer = setTimeout(()=>{ - let emb = createEmbed("loading", context, `Synthesizing images...`) - emb.footer = { - text: "This might take several minutes to complete." - }; - editOrReply(context, { embeds: [ emb ] }); - }, 30000) - - try{ - let t = Date.now(); - - let img = await superagent.post(`https://bf.dallemini.ai/generate`) - .send({ - prompt: args.query - }) - - clearTimeout(noticeTimer) - - let embeds = []; - let files = []; - - for(let i = 0; i < 4; i++){ - embeds.push(createEmbed("default", context, {image: {url:`attachment://dalle${i}.jpeg`}, url: `https://example.com`, footer: { iconUrl: STATICS.labscore, text: `${context.application.name} • Took ${((Date.now() - t) / 1000).toFixed(2)}s` }})) - files.push({ - filename: `dalle${i}.jpeg`, - value: Buffer.from(img.body.images[i], 'base64') - }) - } - - await editOrReply(context, { embeds, files }) - }catch(e){ - if(e.response.status == 503) return await editOrReply(context, createEmbed("error", context, `DALL-E Mini server is busy, try again later.`)) - await editOrReply(context, createEmbed("error", context, `Image generation failed.`)) - } - }, -}; diff --git a/commands/message/image/makesweet/billboard.js b/commands/message/image/makesweet/billboard.js deleted file mode 100644 index 928ac10..0000000 --- a/commands/message/image/makesweet/billboard.js +++ /dev/null @@ -1,57 +0,0 @@ -const { getRecentImage } = require("#utils/attachment"); -const { createEmbed } = require("#utils/embed"); -const { editOrReply } = require("#utils/message"); -const { STATICS } = require("#utils/statics"); - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - -const { billboardCityscape } = require("../../../../service/makesweet"); -const { description } = require("../../../interaction/slash/search/lyrics"); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'billboard', - label: 'text', - metadata: { - description: 'Generates an animated gif with the MakeSweet billboard template.', - description_short: 'Animated billboard generation', - category: 'image', - usage: 'billboard ' - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - let image = await getRecentImage(context, 50) - if (!image) return editOrReply(context, createEmbed("warning", context, "No images found.")) - - await editOrReply(context, createEmbed("loading", context, `Generating image...`)) - - if (!args.text) args.text = "" - try { - const timings = Date.now(); - let mkswt = await billboardCityscape(image) - - return await editOrReply(context, { - embeds: [createEmbed("image", context, { - url: "makesweet.gif", - time: ((Date.now() - timings) / 1000).toFixed(2), - provider: { - icon: STATICS.makesweet, - text: "MakeSweet" - } - })], - files: [{ filename: "makesweet.gif", value: mkswt.body }] - }) - } catch (e) { - console.log(e) - await editOrReply(context, createEmbed("error", context, "Something went wrong.")) - } - }, -} \ No newline at end of file diff --git a/commands/message/image/makesweet/circuitboard.js b/commands/message/image/makesweet/circuitboard.js deleted file mode 100644 index c3f07aa..0000000 --- a/commands/message/image/makesweet/circuitboard.js +++ /dev/null @@ -1,55 +0,0 @@ -const { getRecentImage } = require("#utils/attachment"); -const { createEmbed } = require("#utils/embed"); -const { editOrReply } = require("#utils/message"); -const { STATICS } = require("#utils/statics"); - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - -const { circuitBoard } = require("../../../../service/makesweet"); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'circuitboard', - label: 'text', - metadata: { - description: 'Generates an animated gif with the MakeSweet circuit board template.', - description_short: 'Animated circuit board generation', - category: 'image', - usage: 'circuitboard ' - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - let image = await getRecentImage(context, 50) - if(!image) return editOrReply(context, createEmbed("warning", context, "No images found.")) - - await editOrReply(context, createEmbed("loading", context, `Generating image...`)) - - if(!args.text) args.text = "" - try { - const timings = Date.now(); - let mkswt = await circuitBoard(image) - - return await editOrReply(context, { - embeds: [createEmbed("image", context, { - url: "makesweet.gif", - time: ((Date.now() - timings) / 1000).toFixed(2), - provider: { - icon: STATICS.makesweet, - text: "MakeSweet" - } - })], - files: [{ filename: "makesweet.gif", value: mkswt.body }] - }) - } catch (e) { - await editOrReply(context, createEmbed("error", context, e)) - } - } -} \ No newline at end of file diff --git a/commands/message/image/makesweet/flag.js b/commands/message/image/makesweet/flag.js deleted file mode 100644 index 820a7c9..0000000 --- a/commands/message/image/makesweet/flag.js +++ /dev/null @@ -1,55 +0,0 @@ -const { getRecentImage } = require("#utils/attachment"); -const { createEmbed } = require("#utils/embed"); -const { editOrReply } = require("#utils/message"); -const { STATICS } = require("#utils/statics"); - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - -const { flag } = require("../../../../service/makesweet"); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'flag', - label: 'text', - metadata: { - description: 'Generates an animated gif with the MakeSweet flag template.', - description_short: 'Animated flag generation', - category: 'image', - usage: 'flag ' - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - let image = await getRecentImage(context, 50) - if(!image) return editOrReply(context, createEmbed("warning", context, "No images found.")) - - await editOrReply(context, createEmbed("loading", context, `Generating image...`)) - - if(!args.text) args.text = "" - try { - const timings = Date.now(); - let mkswt = await flag(image) - - return await editOrReply(context, { - embeds: [createEmbed("image", context, { - url: "makesweet.gif", - time: ((Date.now() - timings) / 1000).toFixed(2), - provider: { - icon: STATICS.makesweet, - text: "MakeSweet" - } - })], - files: [{ filename: "makesweet.gif", value: mkswt.body }] - }) - } catch (e) { - await editOrReply(context, createEmbed("error", context, e)) - } - }, -} \ No newline at end of file diff --git a/commands/message/image/makesweet/heartlocket.js b/commands/message/image/makesweet/heartlocket.js deleted file mode 100644 index 930a923..0000000 --- a/commands/message/image/makesweet/heartlocket.js +++ /dev/null @@ -1,56 +0,0 @@ -const { getRecentImage } = require("#utils/attachment"); -const { createEmbed } = require("#utils/embed"); -const { editOrReply } = require("#utils/message"); -const { STATICS } = require("#utils/statics"); - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - -const { heartLocket } = require("../../../../service/makesweet"); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'heartlocket', - label: 'text', - metadata: { - description: 'Generates an animated gif with the MakeSweet heart locket template. Accepts text as an optional input.', - description_short: 'Animated heart locket generation', - examples: ['heartlocket Big Nutty'], - category: 'image', - usage: 'heartlocket []' - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - let image = await getRecentImage(context, 50) - if(!image) return editOrReply(context, createEmbed("warning", context, "No images found.")) - - await editOrReply(context, createEmbed("loading", context, `Generating image...`)) - - if(!args.text) args.text = "" - try { - const timings = Date.now(); - let mkswt = await heartLocket(args.text, image) - - return await editOrReply(context, { - embeds: [createEmbed("image", context, { - url: "makesweet.gif", - time: ((Date.now() - timings) / 1000).toFixed(2), - provider: { - icon: STATICS.makesweet, - text: "MakeSweet" - } - })], - files: [{ filename: "makesweet.gif", value: mkswt.body }] - }) - } catch (e) { - await editOrReply(context, createEmbed("error", context, e)) - } - } -} \ No newline at end of file diff --git a/commands/message/image/photofunia/retro-wave.js b/commands/message/image/photofunia/retro-wave.js deleted file mode 100644 index 8ff37f7..0000000 --- a/commands/message/image/photofunia/retro-wave.js +++ /dev/null @@ -1,64 +0,0 @@ -const { retroWave } = require('#api') - -const { createEmbed } = require('#utils/embed') -const { editOrReply } = require('#utils/message') -const { STATICS } = require('#utils/statics') - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'retro', - label: 'text', - metadata: { - description: 'Generates an image with a retro style.', - description_short: 'Retro-styled text', - examples: ['retro crazy|chaos in|cyberspace'], - category: 'image', - usage: 'retro [-background <1-5>] [-style <1-4>]' - }, - args: [ - {default: 5, name: 'background', type: 'integer', help: "Background Style ` 1, 2, 3, 4, 5 `"}, - {default: 4, name: 'style', type: 'integer', help: "Text Style ` 1, 2, 3, 4 `"}, - ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - context.triggerTyping(); - - if(!args.text) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (text).`)) - if(args.background > 5 || args.background < 1) return editOrReply(context, createEmbed("warning", context, `Invalid Parameter (background).`)) - if(args.style > 4 || args.style < 1) return editOrReply(context, createEmbed("warning", context, `Invalid Parameter (style).`)) - - let lines = `${args.text}| | `.split('|') - if(args.text.includes('|')) lines = [lines[1], lines[2], lines[0]] - - try{ - let res = await retroWave(context, args.background, args.style, lines[2], lines[0], lines[1]) - - if(res.response.body.status == 1) return editOrReply(context, createEmbed("warning", context, res.response.body.errors[0])) - - image = res.response.body.data.images[res.response.body.data.best_quality] - - return editOrReply(context, createEmbed("image", context, { - url: image, - time: res.timings, - provider: { - icon: STATICS.photofunia, - text: "PhotoFunia" - } - })) - }catch(e){ - console.log(e) - if(e.response?.body?.message) return editOrReply(context, createEmbed("error", context, e.response.body.message)) - return editOrReply(context, createEmbed("error", context, `Unable to generate image.`)) - } - } -}; \ No newline at end of file diff --git a/commands/message/image/photofunia/yacht.js b/commands/message/image/photofunia/yacht.js deleted file mode 100644 index f3322c0..0000000 --- a/commands/message/image/photofunia/yacht.js +++ /dev/null @@ -1,52 +0,0 @@ -const { yacht } = require('#api') - -const { createEmbed } = require('#utils/embed') -const { editOrReply } = require('#utils/message') -const { STATICS } = require('#utils/statics') - -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); -const { link } = require("#utils/markdown"); - -module.exports = { - name: 'yacht', - label: 'text', - metadata: { - description: 'Generates an image with custom text on a yacht.', - description_short: 'Custom text on a yacht', - examples: ['yacht Im on a boat.'], - category: 'image', - usage: 'yacht ' - }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY], - run: async (context, args) => { - - return editOrReply(context, createEmbed("default", context, { - description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`, - image: { - url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&" - } - })) - context.triggerTyping(); - - if(!args.text) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (text).`)) - if(args.text.length >= 26) return editOrReply(context, createEmbed("warning", context, `Parameter text too long (>25).`)) - - try{ - let res = await yacht(context, args.text) - image = res.response.body.data.images[res.response.body.data.best_quality] - - return editOrReply(context, createEmbed("image", context, { - url: image, - time: res.timings, - provider: { - icon: STATICS.photofunia, - text: "PhotoFunia" - } - })) - }catch(e){ - console.log(e) - return editOrReply(context, createEmbed("error", context, `Unable to generate image.`)) - } - } -}; \ No newline at end of file diff --git a/commands/message/info/appinfo.js b/commands/message/info/appinfo.js index 80ede62..a56d0ba 100644 --- a/commands/message/info/appinfo.js +++ b/commands/message/info/appinfo.js @@ -2,12 +2,10 @@ const { createEmbed } = require("#utils/embed"); const { icon, highlight, link, stringwrap } = require('#utils/markdown'); const { editOrReply } = require("#utils/message"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent'); const { Routes } = require('detritus-client-rest/lib/endpoints'); +const { PERMISSION_GROUPS } = require("#constants"); const applicationFlags = { EMBEDDED_RELEASED: 1, @@ -48,7 +46,7 @@ module.exports = { category: 'info', usage: 'appinfo ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); let id; diff --git a/commands/message/info/avatar.js b/commands/message/info/avatar.js index dfe664c..a90ec29 100644 --- a/commands/message/info/avatar.js +++ b/commands/message/info/avatar.js @@ -1,13 +1,11 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, page } = require("#utils/embed"); const { icon } = require('#utils/markdown'); const { editOrReply } = require("#utils/message"); const { getUser, getUserAvatar } = require("#utils/users"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'avatar', label: 'user', @@ -20,7 +18,7 @@ module.exports = { usage: 'avatar []', slashCommmand: 'avatar' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.user) args.user = context.userId; diff --git a/commands/message/info/banner.js b/commands/message/info/banner.js index d2a8fd0..c46074f 100644 --- a/commands/message/info/banner.js +++ b/commands/message/info/banner.js @@ -1,13 +1,11 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, page } = require("#utils/embed"); const { icon } = require('#utils/markdown'); const { editOrReply } = require("#utils/message"); const { getUser } = require("#utils/users"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'banner', label: 'user', @@ -20,7 +18,7 @@ module.exports = { usage: 'avatar []', slashCommmand: 'banner' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.user) args.user = context.userId; diff --git a/commands/message/info/guild.js b/commands/message/info/guild.js index 7a8f8b8..552d43c 100644 --- a/commands/message/info/guild.js +++ b/commands/message/info/guild.js @@ -1,13 +1,11 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, page, formatPaginationEmbeds } = require("#utils/embed"); const { guildFeaturesField } = require("#utils/fields"); const { icon, highlight, timestamp, codeblock, smallIconPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'server', label: 'user', @@ -18,7 +16,7 @@ module.exports = { category: 'info', usage: 'server' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { try{ const emojis = context.message.guild.emojis diff --git a/commands/message/info/guildbanner.js b/commands/message/info/guildbanner.js index d9f9d2e..4e31b08 100644 --- a/commands/message/info/guildbanner.js +++ b/commands/message/info/guildbanner.js @@ -1,9 +1,7 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'serverbanner', aliases: ["guildbanner", "gb", "sb", "groupbanner"], @@ -13,7 +11,7 @@ module.exports = { category: 'info', usage: 'serverbanner' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); if (!context.guild.bannerUrl) return editOrReply(context, createEmbed("warning", context, "Server doesn't have a banner set.")) diff --git a/commands/message/info/guildicon.js b/commands/message/info/guildicon.js index 9e69431..340dc05 100644 --- a/commands/message/info/guildicon.js +++ b/commands/message/info/guildicon.js @@ -1,9 +1,7 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'servericon', aliases: ["guildicon", "gi", "si", "groupicon"], @@ -13,7 +11,7 @@ module.exports = { category: 'info', usage: 'servericon' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); if (!context.guild.iconUrl) return editOrReply(context, createEmbed("warning", context, "Server doesn't have an icon.")) diff --git a/commands/message/info/invite.js b/commands/message/info/invite.js index b8318e6..e88b782 100644 --- a/commands/message/info/invite.js +++ b/commands/message/info/invite.js @@ -1,5 +1,5 @@ const { paginator } = require('#client'); -const { DISCORD_INVITES, OPEN_SOURCE_REPOSITORY_URL } = require("#constants"); +const { DISCORD_INVITES, OPEN_SOURCE_REPOSITORY_URL, PERMISSION_GROUPS } = require("#constants"); const { createEmbed, formatPaginationEmbeds, page } = require("#utils/embed"); const { guildFeaturesField } = require("#utils/fields"); @@ -7,9 +7,6 @@ const { icon, highlight, timestamp, iconPill, iconLinkPill, link } = require("#u const { editOrReply } = require("#utils/message"); const { STATIC_ASSETS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'invite', label: 'invite', @@ -21,7 +18,7 @@ module.exports = { category: 'info', usage: 'invite ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.invite) return editOrReply(context, { diff --git a/commands/message/info/role.js b/commands/message/info/role.js index ac708c4..5f29333 100644 --- a/commands/message/info/role.js +++ b/commands/message/info/role.js @@ -1,13 +1,11 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { PERMISSION_CATEGORIES, PERMISSIONS_TEXT } = require('#permissions'); const { createEmbed, page, formatPaginationEmbeds } = require("#utils/embed"); -const { guildFeaturesField } = require("#utils/fields"); -const { icon, highlight, timestamp, codeblock, iconPill, smallPill, pill } = require("#utils/markdown"); +const { icon, iconPill, smallPill, pill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); const { PermissionTools } = require('detritus-client/lib/utils'); // TODO: Move this to a utility module @@ -96,7 +94,7 @@ module.exports = { category: 'info', usage: 'role ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { let r = context.guild.roles.filter((r)=>r.name.toLowerCase().includes(args.query.toLowerCase()) || r.id == args.query)[0] @@ -146,9 +144,7 @@ module.exports = { pages.push(page(newPage)) } - - await paginator.createPaginator({ context, pages: formatPaginationEmbeds(pages) diff --git a/commands/message/info/user.js b/commands/message/info/user.js index e48a669..990798b 100644 --- a/commands/message/info/user.js +++ b/commands/message/info/user.js @@ -1,13 +1,12 @@ const { paginator } = require("#client"); -const { BADGE_ICONS } = require("#constants"); +const { PERMISSION_GROUPS } = require("#constants"); const { createEmbed, page } = require("#utils/embed"); const { icon, highlight, timestamp, smallIconPill, smallPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { getUser, renderBadges, getUserAvatar } = require("#utils/users"); -// TODO: Turn this into a general purpose permissions constant -const { UserFlags, Permissions } = require("detritus-client/lib/constants"); +const { UserFlags } = require("detritus-client/lib/constants"); module.exports = { name: 'user', @@ -21,7 +20,7 @@ module.exports = { usage: 'user []', slashCommand: 'user' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); try{ diff --git a/commands/message/mod/analyze.js b/commands/message/mod/analyze.js index 3f3fba2..4ad36b1 100644 --- a/commands/message/mod/analyze.js +++ b/commands/message/mod/analyze.js @@ -1,4 +1,5 @@ const { perspective } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { format } = require("#utils/ansi"); const { createEmbed } = require("#utils/embed"); @@ -6,8 +7,6 @@ const { icon, codeblock, iconPill, smallPill, stringwrap } = require("#utils/mar const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); const { Components } = require("detritus-client/lib/utils"); function getPerspectiveColor(score) { @@ -63,7 +62,7 @@ module.exports = { category: 'mod', usage: 'analyze ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { await context.triggerTyping(); diff --git a/commands/message/mod/perspective.js b/commands/message/mod/perspective.js index 1357de1..0af6ad8 100644 --- a/commands/message/mod/perspective.js +++ b/commands/message/mod/perspective.js @@ -1,4 +1,5 @@ const { perspective } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { format } = require("#utils/ansi"); const { createEmbed } = require("#utils/embed"); @@ -7,9 +8,6 @@ const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); const { getUserAvatar } = require("#utils/users"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function getPerspectiveColor(score) { if (score >= 0.9) return "m" if (score >= 0.76) return "r" @@ -41,7 +39,7 @@ module.exports = { category: 'mod', usage: 'perspective ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { await context.triggerTyping(); diff --git a/commands/message/mod/purge.js b/commands/message/mod/purge.js index d6a6e0f..bc24819 100644 --- a/commands/message/mod/purge.js +++ b/commands/message/mod/purge.js @@ -3,8 +3,8 @@ const { createEmbed } = require("#utils/embed"); const { editOrReply } = require("#utils/message"); const { icon } = require("#utils/markdown"); -// TODO: Turn this into a general purpose permissions constant const { Permissions } = require("detritus-client/lib/constants"); +const { PERMISSION_GROUPS } = require("#constants"); // TODO: rework this eventually // -> filter by user @@ -22,7 +22,7 @@ module.exports = { {default: 20, name: 'amount', type: 'integer', help: "Amount of messages to be checked (1-20)"}, {default: true, name: 'case', type: 'bool', help: "If provided, should the search query be case sensitive"}, ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.MANAGE_MESSAGES, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, Permissions.MANAGE_MESSAGES], permissions: [Permissions.MANAGE_MESSAGES], onPermissionsFail: (context) => editOrReply(context, {content: `${icon("failiure_simple")} ${context.message.author.mention}, you are lacking the permission \`Manage Messages\`.`}), ratelimit: { diff --git a/commands/message/search/audio.js b/commands/message/search/audio.js index 33940f5..d07df3a 100644 --- a/commands/message/search/audio.js +++ b/commands/message/search/audio.js @@ -1,11 +1,9 @@ +const { PERMISSION_GROUPS } = require('#constants'); const { renderMusicButtons } = require('#utils/buttons'); const { createEmbed } = require('#utils/embed') const { icon } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent') // TODO: make this a constant, or add a URL util @@ -21,7 +19,7 @@ module.exports = { usage: 'audio', slashCommand: "Music Platforms" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); if (!context.message.messageReference) return editOrReply(context, createEmbed("warning", context, "You need to reply to a message containing a song link.")) diff --git a/commands/message/search/bing-images.js b/commands/message/search/bing-images.js index aece568..8fb70d1 100644 --- a/commands/message/search/bing-images.js +++ b/commands/message/search/bing-images.js @@ -1,13 +1,11 @@ const { bingImages } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // TODO: create a favicon() util function createImageResultPage(context, result) { let res = page( @@ -40,7 +38,7 @@ module.exports = { category: 'search', usage: 'bing ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/bing.js b/commands/message/search/bing.js index fe8898d..f44cbad 100644 --- a/commands/message/search/bing.js +++ b/commands/message/search/bing.js @@ -1,14 +1,12 @@ const { bing } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { citation, link, codeblock } = require('#utils/markdown') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // TODO: create a favicon() util function createSearchResultPage(context, entry){ let res; @@ -107,7 +105,7 @@ module.exports = { category: 'search', usage: 'bing ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/google-images.js b/commands/message/search/google-images.js index aa38208..aa6dd2e 100644 --- a/commands/message/search/google-images.js +++ b/commands/message/search/google-images.js @@ -1,13 +1,11 @@ const { googleImages } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // TODO: create a favicon() util function createImageResultPage(context, result) { let res = page(createEmbed("default", context, { @@ -40,7 +38,7 @@ module.exports = { usage: 'image ', slashCommand: "image" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/google.js b/commands/message/search/google.js index 1593077..e8968e4 100644 --- a/commands/message/search/google.js +++ b/commands/message/search/google.js @@ -1,5 +1,6 @@ const { google } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { format } = require('#utils/ansi'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') @@ -7,9 +8,6 @@ const { link, citation, icon, codeblock, pill, smallPill } = require('#utils/mar const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function renderFooter(context, doodle){ if(doodle?.super_g) return { iconUrl: doodle.super_g, @@ -246,7 +244,7 @@ module.exports = { usage: 'google ', slashCommand: "google" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/lyrics.js b/commands/message/search/lyrics.js index f4e6493..750a7db 100644 --- a/commands/message/search/lyrics.js +++ b/commands/message/search/lyrics.js @@ -1,14 +1,12 @@ const { lyrics } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { smallIconPill } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const META_FIELDS = { "Album": "stat_videos", "Released": "note" @@ -77,7 +75,7 @@ module.exports = { usage: 'lyrics ', slashCommand: "lyics" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/maps.js b/commands/message/search/maps.js index 7c4db16..1b21732 100644 --- a/commands/message/search/maps.js +++ b/commands/message/search/maps.js @@ -1,12 +1,11 @@ const { maps, mapsSupplemental } = require('#api'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { link, icon, iconAsEmojiObject, citation } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') const { STATICS, STATIC_ASSETS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); const { Components } = require('detritus-client/lib/utils'); function renderPlaceCard(context, place) { @@ -91,7 +90,7 @@ module.exports = { usage: 'maps ', slashCommand: "maps" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/quora.js b/commands/message/search/quora.js index 55ec4fc..4302826 100644 --- a/commands/message/search/quora.js +++ b/commands/message/search/quora.js @@ -1,13 +1,13 @@ const { quora, quoraResult } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { link, pill } = require('#utils/markdown') const { editOrReply } = require('#utils/message') const { STATICS, STATIC_ASSETS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions, InteractionCallbackTypes } = require("detritus-client/lib/constants"); +const { InteractionCallbackTypes } = require("detritus-client/lib/constants"); const { Components } = require('detritus-client/lib/utils'); function createQuoraAnswerPage(context, question, answer) { @@ -133,7 +133,7 @@ module.exports = { category: 'search', usage: 'quora ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/reverse-image.js b/commands/message/search/reverse-image.js index d41a41e..ce10ab6 100644 --- a/commands/message/search/reverse-image.js +++ b/commands/message/search/reverse-image.js @@ -1,14 +1,12 @@ const { reverseImageSearch } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { getRecentImage } = require("#utils/attachment"); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // TODO: create a favicon() util function createReverseImageSearchResultPage(context, result, source) { let res = page( @@ -43,7 +41,7 @@ module.exports = { usage: 'reverse ', slashCommand: "Reverse Image Search" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); try { diff --git a/commands/message/search/rule34.js b/commands/message/search/rule34.js index 8f96b2a..02f655d 100644 --- a/commands/message/search/rule34.js +++ b/commands/message/search/rule34.js @@ -1,13 +1,11 @@ const { rule34 } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { pill } = require('#utils/markdown') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function createRule34Page(context, result) { let res = page(createEmbed("default", context, { description: '', @@ -55,7 +53,7 @@ module.exports = { args: [ { name: 'site', default: 'rule34', type: 'string', help: `Site to search on \` ${Object.keys(SITES).join(', ')} \`` } ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); diff --git a/commands/message/search/urbandictionary.js b/commands/message/search/urbandictionary.js index e7ae158..a7f3cf1 100644 --- a/commands/message/search/urbandictionary.js +++ b/commands/message/search/urbandictionary.js @@ -1,14 +1,12 @@ const { urbandictionary } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { link, iconPill } = require('#utils/markdown') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function createUrbanPage(context, result){ let e = createEmbed("default", context, { description: `**${link(result.link, result.title)}**`, @@ -48,7 +46,7 @@ module.exports = { usage: 'urbandictionary ', slashCommand: "urbandictionary" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); try{ diff --git a/commands/message/search/wikihow.js b/commands/message/search/wikihow.js index b6df28a..2b8acf1 100644 --- a/commands/message/search/wikihow.js +++ b/commands/message/search/wikihow.js @@ -1,13 +1,11 @@ const { wikihow } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function createWikiHowPage(context, result){ let e = createEmbed("default", context, { author: { @@ -37,7 +35,7 @@ module.exports = { category: 'search', usage: 'wikihow ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); try{ diff --git a/commands/message/search/wikipedia.js b/commands/message/search/wikipedia.js index 92817cf..8e063fe 100644 --- a/commands/message/search/wikipedia.js +++ b/commands/message/search/wikipedia.js @@ -1,12 +1,10 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent'); module.exports = { @@ -20,7 +18,7 @@ module.exports = { category: 'search', usage: 'wikipedia ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); try{ diff --git a/commands/message/search/wolfram-alpha.js b/commands/message/search/wolfram-alpha.js index 4a163f7..9fd4f02 100644 --- a/commands/message/search/wolfram-alpha.js +++ b/commands/message/search/wolfram-alpha.js @@ -1,4 +1,5 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { WolframQueryCompute } = require('#obelisk'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') @@ -6,9 +7,6 @@ const { citation, smallIconPill } = require('#utils/markdown'); const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - function createWolframPage(context, pod, query, sources) { let res = page(createEmbed("default", context, { author: { @@ -52,7 +50,7 @@ module.exports = { usage: 'wolframalpha ', slashCommand: "wolframalpha" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); diff --git a/commands/message/search/xkcd.js b/commands/message/search/xkcd.js index ee26b42..a2dde67 100644 --- a/commands/message/search/xkcd.js +++ b/commands/message/search/xkcd.js @@ -1,11 +1,9 @@ const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { editOrReply } = require('#utils/message') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent') // TODO: create a favicon() util @@ -19,7 +17,7 @@ module.exports = { category: 'search', usage: 'xkcd ' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/search/youtube.js b/commands/message/search/youtube.js index 66e96a8..0d63ad8 100644 --- a/commands/message/search/youtube.js +++ b/commands/message/search/youtube.js @@ -1,15 +1,12 @@ const { youtube } = require('#api'); const { paginator } = require('#client'); -const { YOUTUBE_CATEGORIES } = require('#constants'); +const { YOUTUBE_CATEGORIES, PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { link, iconPill, smallPill, timestamp } = require('#utils/markdown') const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics') -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - // https://www.html-code-generator.com/javascript/shorten-long-numbers const intToString = num => { num = num.toString().replace(/[^0-9.]/g, ''); @@ -122,7 +119,7 @@ module.exports = { args: [ {name: 'type', default: 'all', type: 'string', help: `Video Category`} ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`)) diff --git a/commands/message/utils/dictionary.js b/commands/message/utils/dictionary.js index df41549..665ded8 100644 --- a/commands/message/utils/dictionary.js +++ b/commands/message/utils/dictionary.js @@ -1,15 +1,12 @@ const { dictionary } = require('#api'); const { paginator } = require('#client'); -const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES } = require('#constants'); +const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES, PERMISSION_GROUPS } = require('#constants'); const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed') const { link, iconPill, smallPill, icon, iconLinkPill, pill } = require('#utils/markdown') const { editOrReply } = require('#utils/message') const { dictionaryGetCodeFromAny } = require('#utils/translate'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const LABELS = { "offensive": `${iconPill("warning", "Offensive")}` } @@ -65,7 +62,7 @@ module.exports = { args: [ {name: 'lang', default: 'en', type: 'language', help: "Language to define in"}, ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); diff --git a/commands/message/utils/emoji.js b/commands/message/utils/emoji.js index 960546a..2b27d02 100644 --- a/commands/message/utils/emoji.js +++ b/commands/message/utils/emoji.js @@ -1,5 +1,5 @@ const { emojipedia, emojiKitchen } = require("#api"); -const { EMOJIPEDIA_PLATFORM_TYPES, EMOJIPEDIA_PLATFORM_TYPE_ALIASES } = require("#constants"); +const { EMOJIPEDIA_PLATFORM_TYPES, EMOJIPEDIA_PLATFORM_TYPE_ALIASES, PERMISSION_GROUPS } = require("#constants"); const { ingest } = require("#logging"); const { createEmbed } = require("#utils/embed"); @@ -9,8 +9,7 @@ const { STATICS, STATIC_ASSETS } = require("#utils/statics"); const { Utils } = require("detritus-client"); const { Components, Snowflake } = require("detritus-client/lib/utils"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions, InteractionCallbackTypes, DiscordRegexNames } = require("detritus-client/lib/constants"); +const { InteractionCallbackTypes, DiscordRegexNames } = require("detritus-client/lib/constants"); const { bold } = require("detritus-client/lib/utils/markup"); const onlyEmoji = require('emoji-aware').onlyEmoji; @@ -51,7 +50,7 @@ module.exports = { args: [ {name: 'type', default: 'twitter', type: 'string', help: `Emoji platform type`} ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { await context.triggerTyping() let msg = context.message; diff --git a/commands/message/utils/emojipedia.js b/commands/message/utils/emojipedia.js index 26cce27..a0d06d2 100644 --- a/commands/message/utils/emojipedia.js +++ b/commands/message/utils/emojipedia.js @@ -1,12 +1,12 @@ const { emojipedia } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { createEmbed } = require("#utils/embed"); const { pill, smallIconPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATICS, STATIC_ASSETS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions, InteractionCallbackTypes, MessageComponentButtonStyles } = require("detritus-client/lib/constants"); +const { InteractionCallbackTypes, MessageComponentButtonStyles } = require("detritus-client/lib/constants"); const { Components } = require("detritus-client/lib/utils"); const onlyEmoji = require('emoji-aware').onlyEmoji; @@ -43,7 +43,7 @@ module.exports = { usage: 'emojipedia ', slashCommand: "emojipedia" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { await context.triggerTyping() let msg = context.message; diff --git a/commands/message/utils/eval.js b/commands/message/utils/eval.js index a87ba96..8045857 100644 --- a/commands/message/utils/eval.js +++ b/commands/message/utils/eval.js @@ -1,11 +1,10 @@ -const { REXTESTER_LANGUAGES, COLORS, REXTESTER_COMPILER_ARGS } = require("#constants"); +const { REXTESTER_LANGUAGES, COLORS, REXTESTER_COMPILER_ARGS, PERMISSION_GROUPS } = require("#constants"); const { createEmbed } = require("#utils/embed"); const { codeblock, highlight } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); -// TODO: Turn this into a general purpose permissions constant -const { DiscordRegexNames, Permissions } = require("detritus-client/lib/constants"); +const { DiscordRegexNames } = require("detritus-client/lib/constants"); const { Utils } = require("detritus-client"); const superagent = require('superagent') @@ -23,7 +22,7 @@ module.exports = { args: [ {name: 'lang', default: 'node'} ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); diff --git a/commands/message/utils/latex.js b/commands/message/utils/latex.js index d074445..cc12201 100644 --- a/commands/message/utils/latex.js +++ b/commands/message/utils/latex.js @@ -1,14 +1,11 @@ const { paginator } = require("#client"); -const { COLORS } = require("#constants"); +const { COLORS, PERMISSION_GROUPS } = require("#constants"); const { createEmbed, page, formatPaginationEmbeds } = require("#utils/embed"); const { codeblock, pill, smallIconPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATIC_ICONS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent'); const TEX_REGEX = /(\$\$?.*?\$\$?)/g @@ -24,7 +21,7 @@ module.exports = { category: 'utils', usage: 'latex [-i]' }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); diff --git a/commands/message/utils/ocr.js b/commands/message/utils/ocr.js index 3bd3723..8aeeded 100644 --- a/commands/message/utils/ocr.js +++ b/commands/message/utils/ocr.js @@ -1,4 +1,5 @@ const { googleVisionOcr } = require("#api"); +const { PERMISSION_GROUPS } = require("#constants"); const { getRecentImage } = require("#utils/attachment"); const { createEmbed } = require("#utils/embed"); @@ -6,9 +7,6 @@ const { codeblock, smallIconPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'ocr', metadata: { @@ -18,7 +16,7 @@ module.exports = { usage: 'ocr ', slashCommand: "OCR" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context) => { context.triggerTyping(); let image = await getRecentImage(context, 50) diff --git a/commands/message/utils/ocrtr.js b/commands/message/utils/ocrtr.js index a471ffd..d3cd5ac 100644 --- a/commands/message/utils/ocrtr.js +++ b/commands/message/utils/ocrtr.js @@ -1,5 +1,5 @@ const { googleVisionOcr, googleTranslate } = require("#api"); -const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS } = require("#constants"); +const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS, PERMISSION_GROUPS } = require("#constants"); const { getRecentImage } = require("#utils/attachment"); const { createEmbed } = require("#utils/embed"); @@ -8,9 +8,6 @@ const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); const { isSupported, getCodeFromAny } = require('#utils/translate'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'ocrtr', label: 'to', @@ -26,7 +23,7 @@ module.exports = { args: [ {name: 'from', default: 'auto', type: 'string', help: "Language to translate from"} ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); diff --git a/commands/message/utils/qr.js b/commands/message/utils/qr.js index 7039ab9..0e0a399 100644 --- a/commands/message/utils/qr.js +++ b/commands/message/utils/qr.js @@ -4,10 +4,8 @@ const { editOrReply } = require('#utils/message') const { codeblock, icon, smallIconPill } = require('#utils/markdown'); const { STATICS } = require('#utils/statics'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const superagent = require('superagent'); +const { PERMISSION_GROUPS } = require("#constants"); module.exports = { name: 'qr', @@ -20,7 +18,7 @@ module.exports = { category: 'utils', usage: `qr ` }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { // If we have an argument, generate code diff --git a/commands/message/utils/screenshot.js b/commands/message/utils/screenshot.js index 23f5725..0adb897 100644 --- a/commands/message/utils/screenshot.js +++ b/commands/message/utils/screenshot.js @@ -1,11 +1,9 @@ +const { PERMISSION_GROUPS } = require("#constants"); const { WebUtilsWebPageScreenshot} = require("#obelisk"); const { createEmbed } = require("#utils/embed"); const { editOrReply } = require("#utils/message"); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { label: "url", name: "screenshot", @@ -18,7 +16,7 @@ module.exports = { usage: 'screenshot ', slashCommand: "screenshot" }, - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments], run: async (context, args) => { if (!args.url) return editOrReply(context, createEmbed("warning", context, "No url supplied.")) diff --git a/commands/message/utils/translate.js b/commands/message/utils/translate.js index 2330486..9a8ba59 100644 --- a/commands/message/utils/translate.js +++ b/commands/message/utils/translate.js @@ -1,5 +1,5 @@ const { googleTranslate } = require('#api'); -const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS } = require('#constants'); +const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS, PERMISSION_GROUPS } = require('#constants'); const { createEmbed } = require('#utils/embed') const { codeblock, icon, pill, stringwrap, smallIconPill } = require('#utils/markdown'); @@ -7,9 +7,6 @@ const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics'); const { isSupported, getCodeFromAny } = require('#utils/translate'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - module.exports = { name: 'translate', label: 'text', @@ -25,7 +22,7 @@ module.exports = { {name: 'to', default: 'en', type: 'language', help: "Target Language"}, {name: 'from', default: 'auto', type: 'language', help: "Source Language"} ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { await context.triggerTyping(); diff --git a/commands/message/utils/weather.js b/commands/message/utils/weather.js index 87a30fb..ece130c 100644 --- a/commands/message/utils/weather.js +++ b/commands/message/utils/weather.js @@ -1,14 +1,12 @@ const { darksky } = require('#api'); const { paginator } = require('#client'); +const { PERMISSION_GROUPS } = require('#constants'); const { createEmbed, page } = require('#utils/embed') const { pill, iconPill, smallPill, weatherIcon, timestamp, icon, link, stringwrap} = require('#utils/markdown'); const { editOrReply } = require('#utils/message') const { STATICS } = require('#utils/statics'); -// TODO: Turn this into a general purpose permissions constant -const { Permissions } = require("detritus-client/lib/constants"); - const modifiers = { "°C": (i)=>i, "°F": (i)=>(i*(9/5))+32, @@ -114,7 +112,7 @@ module.exports = { args: [ {name: 't', default: 'celcius', type: 'units', help: "Temperature Units to use."}, ], - permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY], + permissionsClient: [...PERMISSION_GROUPS.baseline], run: async (context, args) => { context.triggerTyping(); if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (location).`)) diff --git a/labscore/constants.js b/labscore/constants.js index 7d0946a..679e663 100644 --- a/labscore/constants.js +++ b/labscore/constants.js @@ -1,3 +1,5 @@ +const { Permissions } = require("detritus-client/lib/constants") + module.exports.DISCORD_INVITES = Object.freeze({ support: "https://discord.gg/8c4p6xcjru", privacy: "https://discord.gg/sQs8FhcTGh", @@ -38,6 +40,22 @@ module.exports.COLORS = Object.freeze({ incognito: 10057726, }) +// Permission requirements that apply to commands +module.exports.PERMISSION_GROUPS = Object.freeze({ + // Baseline permission set for regular commands + baseline: [Permissions.SEND_MESSAGES, Permissions.VIEW_CHANNEL, Permissions.USE_EXTERNAL_EMOJIS, Permissions.EMBED_LINKS, Permissions.READ_MESSAGE_HISTORY], + // Baseline permission set for slash commands + baseline_slash: [ + Permissions.SEND_MESSAGES, Permissions.EMBED_LINKS, + // Related to using user commands + Permissions.USE_APPLICATION_COMMANDS, + 1n << 50n // Use external apps + ], + + // Permissions for all commands that use attachments + attachments: [Permissions.ATTACH_FILES], +}) + module.exports.BADGE_ICONS = Object.freeze({ "active_developer": "<:b:1263607989873414196>", "bot_developer": "<:b:1263605652337463489>", @@ -1589,6 +1607,12 @@ module.exports.YOUTUBE_CATEGORIES = { // Special character that allows for fully hidden masked links on all (supported) platforms. module.exports.HIDDEN_MASKED_LINK_CHARACTER = "󠄴"; + +// Allows force-displaying an incognito reason +module.exports.INCOGNITO_REASONS = Object.freeze({ + permissions: 50013 +}) + /** * These will force the command to become "incognito". */ @@ -1601,7 +1625,7 @@ module.exports.MESSAGE_BLOCK_REASONS = Object.freeze({ message: "the server's AutoMod setup", support_article: 4421269296535 }, - // TODO: Handle permissions properly, this works as a "hack" for now. + // TODO: Handle permissions properly, this works as a "hack" for now.e 50013: { message: "the channel's permission setup", support_article: 10543994968087 diff --git a/labscore/utils/interactions.js b/labscore/utils/interactions.js index d42bcfc..b379b86 100644 --- a/labscore/utils/interactions.js +++ b/labscore/utils/interactions.js @@ -1,18 +1,31 @@ const { MessageFlags, InteractionCallbackTypes } = require("detritus-client/lib/constants") const { Context } = require("detritus-client/lib/command") -const { InteractionContext } = require("detritus-client/lib/interaction") +const { InteractionContext } = require("detritus-client/lib/interaction"); +const { PERMISSION_GROUPS, INCOGNITO_REASONS } = require("#constants"); /** * Acknowledges a command or interaction. * @param { InteractionContext|Context } context Command/interaction context * @param { boolean } incognito Specifies if the interaction should run privately (only applicable for interactions) + * @param { Array } permissions Array of permissions that are required to execute this command */ -module.exports.acknowledge = async function(context, incognito = false){ +module.exports.acknowledge = async function(context, incognito = false, permissions = [...PERMISSION_GROUPS.baseline_slash]){ // Interaction flow if(context.editOrRespond){ + if(!context._meta) context._meta = {}; + + // Handle permissions for user commands in a guild context + if(context.member && permissions.length >= 1){ + for(const p of permissions){ + if(!context.member.can(p)){ + incognito = true; + context._meta.incognitoReason = INCOGNITO_REASONS.permissions; + } + } + } + if(incognito){ - if(!context._meta) context._meta = {}; context._meta.isIncognito = true; return await context.respond({data: { flags: MessageFlags.EPHEMERAL }, type: InteractionCallbackTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE}); } diff --git a/labscore/utils/message.js b/labscore/utils/message.js index 9723ff2..08eb5be 100644 --- a/labscore/utils/message.js +++ b/labscore/utils/message.js @@ -32,6 +32,21 @@ module.exports.editOrReply = function(context, message, disableReference = false }); } + if(context._meta?.incognitoReason){ + // TODO: make this an applyIncognitoNotice helper + if(message.content){ + if(message.embeds && message.embeds.length <= 4){ + message.embeds.unshift({ + description: `${icon("flask_incognito")} ​ ​ This response has been made incognito due to ${MESSAGE_BLOCK_REASONS[context._meta.incognitoReason].message}.`, + color: COLORS.incognito + }) + } + } else { + // Uses new subtext formatting to look more "native" + message.content = `-# ${icon("flask_mini")} This response has been made incognito due to ${MESSAGE_BLOCK_REASONS[context._meta.incognitoReason].message} • ${link("https://support.discord.com/hc/en-us/articles/" + MESSAGE_BLOCK_REASONS[context._meta.incognitoReason].support_article, "Learn More", "Support Article")}` + } + } + return context.editOrRespond(message).catch(async (e)=>{ const errorData = await e.response.json(); if(MESSAGE_BLOCK_REASONS[errorData.code]){ diff --git a/package.json b/package.json index 16046c5..46a8ac0 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "author": "bignutty", "license": "ISC", "dependencies": { - "detritus-client": "^0.17.0-beta.40", + "detritus-client": "^0.17.0-beta.59", "dotenv": "^16.4.5", "emoji-aware": "^3.1.0", "eventemitter3": "^4.0.7",