/ src / modules / commands / requireRole.ts
requireRole.ts
 1  import {
 2    SlashCommandBuilder,
 3    PermissionsBitField,
 4    CommandInteraction,
 5    EmbedBuilder
 6  } from 'discord.js';
 7  import { prepare, getGuildConfig, getLang } from './../db';
 8  import { Command } from '../commandHandler';
 9  import { __, __h_dc } from '../messages';
10  import config from '../config';
11  
12  export default {
13    data: new SlashCommandBuilder()
14      .setName('requirerole')
15      .setDescription('Require users to have this role in order to receive Activity Roles.')
16      .setDescriptionLocalizations(
17        __h_dc('Require users to have this role in order to receive Activity Roles.')
18      )
19      .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageRoles)
20      .setDMPermission(false)
21      .addRoleOption(option =>
22        option
23          .setName('role')
24          .setDescription(
25            'The role to require. To get the current role, omit this. To reset, enter @everyone.'
26          )
27          .setDescriptionLocalizations(
28            __h_dc(
29              'The role to require. To get the current role, omit this. To reset, enter @everyone.'
30            )
31          )
32      ),
33    execute: async (interaction: CommandInteraction) => {
34      const locale = getLang(interaction);
35      const role = interaction.options.get('role')?.role;
36      const guildConfig = getGuildConfig(interaction.guildId!);
37  
38      if (role) {
39        if (
40          role.id === guildConfig.requiredRoleID ||
41          (role.id === interaction.guild?.roles.everyone.id && guildConfig.requiredRoleID === null)
42        ) {
43          interaction.reply({
44            embeds: [
45              new EmbedBuilder()
46                .setDescription(
47                  __(
48                    { phrase: '%s is already set as the required role.', locale },
49                    role.id === interaction.guild?.roles.everyone.id
50                      ? '@everyone'
51                      : `<@&${guildConfig.requiredRoleID}>`
52                  )
53                )
54                .setColor(config.COLOR)
55            ]
56          });
57        } else {
58          prepare('UPDATE guilds SET requiredRoleID = ? WHERE guildID = ?').run(
59            role.id === interaction.guild?.roles.everyone.id ? null : role.id,
60            interaction.guildId!
61          );
62          interaction.reply({
63            embeds: [
64              new EmbedBuilder()
65                .setDescription(
66                  __(
67                    {
68                      phrase: 'Users now need to have %s in order to receive Activity Roles.',
69                      locale
70                    },
71                    role.id === interaction.guild?.roles.everyone.id ? '@everyone' : `<@&${role.id}>`
72                  )
73                )
74                .setColor(config.COLOR)
75            ]
76          });
77        }
78      } else {
79        interaction.reply({
80          embeds: [
81            new EmbedBuilder()
82              .setDescription(
83                __(
84                  { phrase: 'Users need to have %s in order to receive Activity Roles.', locale },
85                  guildConfig.requiredRoleID === null
86                    ? '@everyone'
87                    : `<@&${guildConfig.requiredRoleID}>`
88                )
89              )
90              .setColor(config.COLOR)
91          ]
92        });
93      }
94    }
95  } as Command;