Add command permission checks
Level 0: Every user - Public commands Level 1: Guild owners or members with respective admin role - Elevated guild commands Level 2: Global admins - Every command including levels below
This commit is contained in:
61
commands/guildSettings.js
Normal file
61
commands/guildSettings.js
Normal file
@@ -0,0 +1,61 @@
|
||||
const { SlashCommandBuilder, ComponentType, ActionRowBuilder, ButtonBuilder, ButtonStyle, SelectMenuBuilder } = require("discord.js");
|
||||
const { GeneralUtils, GuildUtils } = require("../util");
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("settings")
|
||||
.setDescription("Change Guild Settings"),
|
||||
permissionLevel: 1,
|
||||
|
||||
async execute(interaction) {
|
||||
let reply = "Guild settings:\n";
|
||||
const row = new ActionRowBuilder();
|
||||
row.addComponents(
|
||||
new ButtonBuilder()
|
||||
.setCustomId(`set-admin-role`)
|
||||
.setLabel('Set Admin Role')
|
||||
.setStyle(ButtonStyle.Primary)
|
||||
);
|
||||
const message = await interaction.reply({ content: reply, components: [row], fetchReply: true });
|
||||
|
||||
const filter = (m) => m.author.id === message.author.id;
|
||||
const collector = message.createMessageComponentCollector(filter, { componentType: ComponentType.Button, time: 120000 });
|
||||
|
||||
//BUGBUG: end callback does not trigger
|
||||
collector.on('end', collected => {
|
||||
console.log(`Collected ${collected.size} interactions.`);
|
||||
message.edit({ components: [] });
|
||||
});
|
||||
|
||||
collector.on('collect', async m => {
|
||||
switch (m.customId) {
|
||||
case 'set-admin-role':
|
||||
//Build select menu with every role in the guild
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(
|
||||
new SelectMenuBuilder()
|
||||
.setCustomId('select')
|
||||
.setPlaceholder('Nothing selected')
|
||||
.addOptions(
|
||||
m.guild.roles.cache.map(role => ({
|
||||
label: role.name,
|
||||
description: role.id,
|
||||
value: role.id
|
||||
}))
|
||||
),
|
||||
);
|
||||
const message = await m.reply({ content: 'Select a role', components: [row], fetchReply: true });
|
||||
|
||||
const filter = (m) => m.author.id === message.author.id;
|
||||
const replyCollector = message.createMessageComponentCollector(filter, { componentType: ComponentType.SelectMenu, time: 25000 });
|
||||
replyCollector.on('collect', async r => {
|
||||
const role = m.guild.roles.cache.find(role => role.id === r.values[0]);
|
||||
m.deleteReply(); //Delete select menu message
|
||||
GuildUtils.setProperty(m.guild.id, 'adminRoleId', role.id);
|
||||
r.reply({ content: `Selected role: ${role.name} \n(${role.id})`, components: [] });
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user