aboutsummaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorMax Isom <[email protected]>2022-01-29 11:20:40 -0500
committerMax Isom <[email protected]>2022-01-29 11:20:40 -0500
commit1621b2c2815f7458df19320361a4a5a41c9cf4d3 (patch)
tree47c7c1377243c5d91a95c0c7d9217ad3a3b9cfdb /src/utils
parent8e00726dc2c8179c7aa03f72e96544e78b4fb001 (diff)
downloadmuse-1621b2c2815f7458df19320361a4a5a41c9cf4d3.tar.xz
muse-1621b2c2815f7458df19320361a4a5a41c9cf4d3.zip
Add permissions system
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/update-permissions-for-guild.ts44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/utils/update-permissions-for-guild.ts b/src/utils/update-permissions-for-guild.ts
new file mode 100644
index 0000000..ca7c427
--- /dev/null
+++ b/src/utils/update-permissions-for-guild.ts
@@ -0,0 +1,44 @@
+import {ApplicationCommandPermissionData, Guild} from 'discord.js';
+import {prisma} from './db.js';
+
+const COMMANDS_TO_LIMIT_TO_GUILD_OWNER = ['config'];
+
+const updatePermissionsForGuild = async (guild: Guild) => {
+ const settings = await prisma.setting.findUnique({
+ where: {
+ guildId: guild.id,
+ },
+ });
+
+ if (!settings) {
+ throw new Error('could not find settings for guild');
+ }
+
+ const permissions: ApplicationCommandPermissionData[] = [
+ {
+ id: guild.ownerId,
+ type: 'USER',
+ permission: true,
+ },
+ {
+ id: guild.roles.everyone.id,
+ type: 'ROLE',
+ permission: false,
+ },
+ ];
+ const commands = await guild.commands.fetch();
+
+ await guild.commands.permissions.set({fullPermissions: commands.map(command => ({
+ id: command.id,
+ permissions: COMMANDS_TO_LIMIT_TO_GUILD_OWNER.includes(command.name) ? permissions : [
+ ...permissions,
+ ...(settings.roleId ? [{
+ id: settings.roleId,
+ type: 'ROLE' as const,
+ permission: true,
+ }] : []),
+ ],
+ }))});
+};
+
+export default updatePermissionsForGuild;