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;