mirror of
https://github.com/TheShadowEevee/Konpeki-Discord-Bot.git
synced 2025-01-11 22:38:50 -06:00
105 lines
5.5 KiB
JavaScript
105 lines
5.5 KiB
JavaScript
|
/*
|
||
|
* Konpeki Discord Bot - Slash Command Definition File
|
||
|
* art-fight.js - A small scale team art fight clone
|
||
|
* See https://discord.com/developers/docs/interactions/message-components#select-menus
|
||
|
*
|
||
|
* PLEASE NOTE: This code is a certified mess. It is readable to someone with some knowledge, but be warned this is not a great template for new commands to be based on.
|
||
|
*/
|
||
|
|
||
|
const { ChannelSelectMenuBuilder, RoleSelectMenuBuilder, SlashCommandBuilder, ActionRowBuilder, ChannelType, ButtonBuilder, EmbedBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, PermissionsBitField } = require('discord.js');
|
||
|
// const wait = require('node:timers/promises').setTimeout;
|
||
|
|
||
|
// let nullResponse, nullCheckResponse, channelID, roleArray, embedTitle, embedDescription, embedColor, embedFooter;
|
||
|
|
||
|
// This is the actual logic that runs the reaction role creation script.
|
||
|
module.exports = {
|
||
|
data: new SlashCommandBuilder()
|
||
|
.setName('art-fight')
|
||
|
.setDescription('Team Art Fight Management Commands')
|
||
|
.addStringOption(option =>
|
||
|
option.setName('title')
|
||
|
.setDescription('Set the title of the event')
|
||
|
.setRequired(true),
|
||
|
)
|
||
|
.addChannelOption(option =>
|
||
|
option.setName('rank-channel')
|
||
|
.setDescription('Where to post the leaderboard')
|
||
|
.setRequired(true)
|
||
|
.addChannelTypes(0),
|
||
|
)
|
||
|
// .addStringOption()
|
||
|
.addRoleOption(option =>
|
||
|
option.setName('team1')
|
||
|
.setDescription('Select a Role for Team 1')
|
||
|
.setRequired(true),
|
||
|
)
|
||
|
.addUserOption(option =>
|
||
|
option.setName('team1cap')
|
||
|
.setDescription('Select a Captain for Team 1'),
|
||
|
)
|
||
|
.addRoleOption(option =>
|
||
|
option.setName('team2')
|
||
|
.setDescription('Select a Role for Team 2'),
|
||
|
)
|
||
|
.addUserOption(option =>
|
||
|
option.setName('team2cap')
|
||
|
.setDescription('Select a Captain for Team 2'),
|
||
|
)
|
||
|
.addRoleOption(option =>
|
||
|
option.setName('team3')
|
||
|
.setDescription('Select a Role for Team 3'),
|
||
|
)
|
||
|
.addUserOption(option =>
|
||
|
option.setName('team3cap')
|
||
|
.setDescription('Select a Captain for Team 3'),
|
||
|
),
|
||
|
async execute(interaction) {
|
||
|
|
||
|
// if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageRoles)) {
|
||
|
// interaction.reply({ content: 'You do not have the Manage Roles Permission!', ephemeral: true });
|
||
|
// }
|
||
|
|
||
|
// Get the selected channel from the command options
|
||
|
const title = interaction.options.getString('title') ?? 'No Title.';
|
||
|
const channel = interaction.options.getChannel('rank-channel') ?? null;
|
||
|
const t1 = interaction.options.getRole('team1') ?? null;
|
||
|
const t1c = interaction.options.getUser('team1cap') ?? null;
|
||
|
const t2 = interaction.options.getRole('team2') ?? null;
|
||
|
const t2c = interaction.options.getUser('team2cap') ?? null;
|
||
|
const t3 = interaction.options.getRole('team3') ?? null;
|
||
|
const t3c = interaction.options.getUser('team3cap') ?? null;
|
||
|
|
||
|
try {
|
||
|
// Next two lines credit to ChatGPT 4o Mini
|
||
|
// Ensure all guild members are fetched
|
||
|
await interaction.guild.members.fetch();
|
||
|
|
||
|
// Get the members with the roles
|
||
|
const t1members = (t1.members.size ? '' + (t1c ? t1.members.filter(member => member.id !== t1c.id).map(member => `<@${member.id}>`).join(', ') + '' : t1.members.map(member => `<@${member.id}>`).join(', ') + '') : '`No members`') ?? '`No members`';
|
||
|
const t2members = (t2.members.size ? '' + (t2c ? t2.members.filter(member => member.id !== t2c.id).map(member => `<@${member.id}>`).join(', ') + '' : t2.members.map(member => `<@${member.id}>`).join(', ') + '') : '`No members`') ?? '`No members`';
|
||
|
const t3members = (t3.members.size ? '' + (t3c ? t3.members.filter(member => member.id !== t3c.id).map(member => `<@${member.id}>`).join(', ') + '' : t3.members.map(member => `<@${member.id}>`).join(', ') + '') : '`No members`') ?? '`No members`';
|
||
|
|
||
|
// Check if the required options are provided
|
||
|
if (!channel || !t1) {
|
||
|
await interaction.reply({ content: 'Required options are missing.', ephemeral: true });
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Check if the optional options are provided
|
||
|
const t2Exists = !!t2; // Check if t3 is not null or undefined
|
||
|
const t3Exists = !!t3; // Check if t3 is not null or undefined
|
||
|
|
||
|
// Create a response message with channel details
|
||
|
let response = `# ${title}\n`;
|
||
|
response += `Leaderboard Channel: <#${channel.id}>\n\n`;
|
||
|
response += `Team 1: <@&${t1.id}>\nCaptain: ${t1c ? `${t1c}` : 'No Captain'}\nMembers: ${t1members ? `${t1members}` : 'No Members'}\n\n`;
|
||
|
response += t2Exists ? `Team 2: <@&${t2.id}>\nCaptain: ${t2c ? `${t2c}` : 'No Captain'}\nMembers: ${t2members ? `${t2members}` : 'No Members'}\n\n` : '';
|
||
|
response += t3Exists ? `Team 3: <@&${t3.id}>\nCaptain: ${t3c ? `${t3c}` : 'No Captain'}\nMembers: ${t3members ? `${t3members}` : 'No Members'}\n\n` : '';
|
||
|
await interaction.reply({ content: response, ephemeral: true });
|
||
|
}
|
||
|
catch (error) {
|
||
|
console.error(error);
|
||
|
await interaction.reply({ content: 'An error occurred while fetching role members.', ephemeral: true });
|
||
|
}
|
||
|
},
|
||
|
};
|