From f9a834209632099a1c66415b28c39d7abe665eeb Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 25 Jan 2022 18:57:12 +0100 Subject: [PATCH] Fix things --- .npmignore | 132 +++++++++++++++++++++++++++++++++++++++++++ src/setup.ts | 27 ++++++++- src/slashHandling.ts | 4 +- 3 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..b37e7af --- /dev/null +++ b/.npmignore @@ -0,0 +1,132 @@ +.dockerignore + +# Compiled js +*.js + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/src/setup.ts b/src/setup.ts index a6faaaa..9c1d62c 100644 --- a/src/setup.ts +++ b/src/setup.ts @@ -2,6 +2,7 @@ import {Snowflake} from "discord-api-types" import {ApplicationCommandPermissions, Collection, Guild, GuildApplicationCommandPermissionData, TextChannel, Webhook} from "discord.js" import {createEmptyPermission, createRolePermission} from "./slashPermissionsUtils" import {rest as impressiveRest} from "./impressive" +import {client as dsclient} from "./discord" import {WebhookFull, WebhookKind} from "./types" @@ -28,8 +29,30 @@ export async function linkImpressiveWebhook(discordWebhook: Webhook): Promise> { - console.debug("[Setup/Discord] Fetching slash commands...") +export async function setGlobalCommandPermissions(guild: Guild, adminRoleId: Snowflake): Promise> { + console.debug("[Setup/Discord] Fetching global slash commands...") + const commands = await dsclient.application.commands.fetch() + + console.debug("[Setup/Discord] Setting command permissions for guild...") + const fullPermissions = commands.map(cmd => { + if(["list", "view"].includes(cmd.name)) { + return createRolePermission(cmd.id, guild.id) + } + else if(["create", "edit", "delete", "unlock", "relock"].includes(cmd.name)) { + return createRolePermission(cmd.id, adminRoleId) + } + else { + return createEmptyPermission(cmd.id) + } + }) + const result = await dsclient.application.commands.permissions.set({fullPermissions, guild: guild.id}) + + console.debug("[Setup/Discord] Successfully set up command permissions!") + return result +} + +export async function setGuildCommandPermissions(guild: Guild, adminRoleId: Snowflake): Promise> { + console.debug("[Setup/Discord] Fetching guild slash commands...") const commands = await guild.commands.fetch() console.debug("[Setup/Discord] Setting command permissions for guild...") diff --git a/src/slashHandling.ts b/src/slashHandling.ts index 661318b..9d187af 100644 --- a/src/slashHandling.ts +++ b/src/slashHandling.ts @@ -2,7 +2,7 @@ import {AxiosError} from "axios" import {Collection, CommandInteraction, Permissions, TextChannel} from "discord.js" import {makeGroup, makeUser} from "./make" import {renderAchievementEmbed, renderImpressiveError, renderMultilineCode, renderUnlockEmbed} from "./render" -import {linkImpressiveWebhook, setCommandPermissions, setupDiscordWebhook} from "./setup" +import {linkImpressiveWebhook, setGlobalCommandPermissions, setGuildCommandPermissions, setupDiscordWebhook} from "./setup" import {AchievementFull, UnlockFull, Alloy} from "./types" import {client as dsclient} from "./discord" import {editResource, rest as impressiveRest} from "./impressive" @@ -74,7 +74,7 @@ async function handleSetup(interaction: CommandInteraction): Promise { const channel = await findTargetChannel(interaction) const dsWebhook = await setupDiscordWebhook(channel) const isWebhook = await linkImpressiveWebhook(dsWebhook) - const permissions = await setCommandPermissions(guild, interaction.options.get("role").role.id) + const permissions = await setGlobalCommandPermissions(guild, interaction.options.get("role").role.id) await interaction.reply({ content: `:hammer: Set up achievements in channel <#${channel.id}> and enabled the other Strawberry commands!`,