ui updates and bot updates. new commands and command handler
This commit is contained in:
63
discord-bot/commands/setup-autorole.js
Normal file
63
discord-bot/commands/setup-autorole.js
Normal file
@@ -0,0 +1,63 @@
|
||||
const { SlashCommandBuilder, ActionRowBuilder, RoleSelectMenuBuilder, ComponentType } = require('discord.js');
|
||||
const { readDb, writeDb } = require('../../backend/db.js');
|
||||
|
||||
module.exports = {
|
||||
name: 'setup-autorole',
|
||||
description: 'Interactively set up the autorole for this server.',
|
||||
enabled: true,
|
||||
builder: new SlashCommandBuilder()
|
||||
.setName('setup-autorole')
|
||||
.setDescription('Interactively set up the autorole for this server.'),
|
||||
async execute(interaction) {
|
||||
const db = readDb();
|
||||
const guildId = interaction.guildId;
|
||||
|
||||
if (!db[guildId]) {
|
||||
db[guildId] = {};
|
||||
}
|
||||
|
||||
const roleSelect = new RoleSelectMenuBuilder()
|
||||
.setCustomId('autorole_role_select')
|
||||
.setPlaceholder('Select the role to assign on join.');
|
||||
|
||||
const row = new ActionRowBuilder().addComponents(roleSelect);
|
||||
|
||||
const roleReply = await interaction.reply({
|
||||
content: 'Please select the role you want to automatically assign to new members.',
|
||||
components: [row],
|
||||
flags: 64,
|
||||
});
|
||||
|
||||
try {
|
||||
const roleConfirmation = await roleReply.awaitMessageComponent({
|
||||
componentType: ComponentType.RoleSelect,
|
||||
time: 60000,
|
||||
});
|
||||
|
||||
const roleId = roleConfirmation.values[0];
|
||||
const role = interaction.guild.roles.cache.get(roleId);
|
||||
|
||||
if (role.managed || role.position >= interaction.guild.members.me.roles.highest.position) {
|
||||
await roleConfirmation.update({
|
||||
content: `I cannot assign the role **${role.name}** because it is managed by an integration or is higher than my highest role. Please select another role.`,
|
||||
components: [],
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
db[guildId].autorole = {
|
||||
enabled: true,
|
||||
roleId: roleId,
|
||||
};
|
||||
writeDb(db);
|
||||
|
||||
await roleConfirmation.update({
|
||||
content: `Autorole setup complete! New members will be assigned the **${role.name}** role.`,
|
||||
components: [],
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error during autorole setup:', error);
|
||||
await interaction.editReply({ content: 'Configuration timed out or an error occurred.', components: [] });
|
||||
}
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user