diff options
| author | Max Isom <[email protected]> | 2022-01-29 11:20:40 -0500 |
|---|---|---|
| committer | Max Isom <[email protected]> | 2022-01-29 11:20:40 -0500 |
| commit | 1621b2c2815f7458df19320361a4a5a41c9cf4d3 (patch) | |
| tree | 47c7c1377243c5d91a95c0c7d9217ad3a3b9cfdb /src/utils | |
| parent | 8e00726dc2c8179c7aa03f72e96544e78b4fb001 (diff) | |
| download | muse-1621b2c2815f7458df19320361a4a5a41c9cf4d3.tar.xz muse-1621b2c2815f7458df19320361a4a5a41c9cf4d3.zip | |
Add permissions system
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/update-permissions-for-guild.ts | 44 |
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; |
