Untitled
unknown
javascript
2 months ago
31 kB
2
Indexable
const { Client, Collection, EmbedBuilder, IntentsBitField, REST, Routes, Options, ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder, PermissionFlagsBits, PermissionsBitField, ChannelType } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('changescore') .setDescription('add points to the players/remove points from the players!') .addStringOption(option => option .setName('winners') .setDescription('mention the players you want to add the points to') .setRequired(true) ) .addStringOption(option => option .setName('losers') .setDescription('mention the players you want to remove the points from') .setRequired(true) ) .addUserOption(option => option .setName('tk') .setDescription('mention the player who has won the match') .setRequired(false) ) .addStringOption(option => option .setName('left') .setDescription('mention the players who have left the match') .setRequired(false) ), async execute(interaction) { await interaction.deferReply(); if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageNicknames)) { return interaction.followUp({ content: '❌ You do not have a permission to change the score of players', ephemeral: true }); } const winnersInput = interaction.options.getString('winners'); const losersInput = interaction.options.getString('losers'); const member = interaction.options.getMember('tk'); const leftInput = interaction.options.getString('left'); const winnersMentions = winnersInput.match(/<@!?(\d+)>/g); const losersMentions = losersInput.match(/<@!?(\d+)>/g); const rankChangesChannel = interaction.guild.channels.cache.find(c => c.name.includes('rank-changes')); let points; let roleFound = false; if (!winnersMentions) { return interaction.followUp({content: 'invalid "winners" mention', ephemeral: true }) } else if (!losersMentions) { interaction.followUp({content: 'invalid "losers" mention', ephemeral: true }) } const guildMembers = await interaction.guild.members.fetch(); const PointsAddedUsers = []; const PointsRemovedUsers = []; const LeftUsers = []; let tkResult; for (const mention of winnersMentions) { const userId = mention.replace(/[<@!>]/g, ''); const member = guildMembers.get(userId); if (member) { try { const rank = member.roles.cache.map(role => role.name); for (const roleName of rank) { switch (roleName) { case 'Rookie (0-160)': points = 20; roleFound = true; break; case 'Veteran (160-300)': points = 20; roleFound = true; break; case 'Elite (300-500)': points = 20; roleFound = true; break; case 'Pro (500-650)': points = 15; roleFound = true; break; case 'Master (650-850)': points = 10; roleFound = true; break; case 'Grandmaster (850-999)': points = 10; roleFound = true; break; case 'Legendary (1000+)': points = 0; roleFound = true; break; } } if(!roleFound) { return interaction.followUp({content: `${member} does not have any rank yet`, ephemeral: true }); } const currentNickname = member.nickname || member.user.username; const numberMatch = currentNickname.match(/\d+/); if (numberMatch) { const currentNumber = parseInt(numberMatch[0], 10); const newNumber = currentNumber + points; const newNickname = currentNickname.replace( numberMatch[0], newNumber.toString() ); await member.setNickname(newNickname); PointsAddedUsers.push(`${currentNickname} + ${points} -> ${newNickname}`); const rookie = member.roles.cache.find(r => r.name === 'Rookie (0-160)'); const veteran = member.roles.cache.find(r => r.name === 'Veteran (160-300)'); const elite = member.roles.cache.find(r => r.name === 'Elite (300-500)'); const pro = member.roles.cache.find(r => r.name === 'Pro (500-650)'); const master = member.roles.cache.find(r => r.name === 'Master (650-850)'); const grandmaster = member.roles.cache.find(r => r.name === 'Grandmaster (850-999)'); const legendary = member.roles.cache.find(r => r.name === 'Legendary (1000+)'); if(rookie && !veteran && newNumber >= 160) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Veteran (160-300)')); await rankChangesChannel.send(`${member} has just ranked up to Veteran. Congratulations!`); } else if (veteran && !elite && newNumber >= 300) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Elite (300-500)')); await rankChangesChannel.send(`${member} has just ranked up to Elite. Congratulations!`); } else if (elite && !pro && newNumber >= 500) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Pro (500-650)')); await rankChangesChannel.send(`${member} has just ranked up to Pro. Congratulations!`); } else if (pro && !master && newNumber >= 650) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Master (650-850)')); await rankChangesChannel.send(`${member} has just ranked up to Master. Congratulations!`); } else if (master && !grandmaster && newNumber >= 850) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Grandmaster (850-999)')) await rankChangesChannel.send(`${member} has just ranked up to Grandmaster. Congratulations!`); } else if (grandmaster && !legendary && newNumber >= 1000) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Legendary (1000+)')) await rankChangesChannel.send(`${member} has just ranked up to Legendary. Congratulations!`); } } else { await interaction.followUp({content: `The player ${member} does not have any points yet`, ephemeral: true }); } } catch (error) { await interaction.followUp({content: `Not able to udpate the score of ${member}`, ephemeral: true }); } } else { await interaction.followUp({content: `The user if with ID ${userId} was not found`, ephemeral: true }); } } for (const mention of losersMentions) { const userId = mention.replace(/[<@!>]/g, ''); const member = guildMembers.get(userId); if (member) { try { const rank = member.roles.cache.map(role => role.name); for (const roleName of rank) { switch (roleName) { case 'Rookie (0-160)': points = 10; roleFound = true; break; case 'Veteran (160-300)': points = 10; roleFound = true; break; case 'Elite (300-500)': points = 15; roleFound = true; break; case 'Pro (500-650)': points = 15; roleFound = true; break; case 'Master (650-850)': points = 20; roleFound = true; break; case 'Grandmaster (850-999)': points = 30; roleFound = true; break; case 'Legendary (1000+)': points = 50; roleFound = true; break; } } if(!roleFound) { return interaction.followUp({content: `${member} does not have any rank yet`, ephemeral: true }); } const currentNickname = member.nickname || member.user.username; const numberMatch = currentNickname.match(/\d+/); if (numberMatch) { const currentNumber = parseInt(numberMatch[0], 10); let newNumber = currentNumber - points; if(newNumber < 0) { newNumber = 0 } const newNickname = currentNickname.replace( numberMatch[0], newNumber.toString() ); await member.setNickname(newNickname); PointsRemovedUsers.push(`${currentNickname} - ${points} -> ${newNickname}`) const veteran = member.roles.cache.find(r => r.name === 'Veteran (160-300)'); const elite = member.roles.cache.find(r => r.name === 'Elite (300-500)'); const pro = member.roles.cache.find(r => r.name === 'Pro (500-650)'); const master = member.roles.cache.find(r => r.name === 'Master (650-850)'); const grandmaster = member.roles.cache.find(r => r.name === 'Grandmaster (850-999)'); const legendary = member.roles.cache.find(r => r.name === 'Legendary (1000+)'); const rankChangesChannel = interaction.guild.channels.cache.find(c => c.name ==='rank-changes'); if(veteran && newNumber < 160) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Veteran (160-300)')); await rankChangesChannel.send(`${member} was demoted to Rookie.`); } else if (elite && newNumber < 300) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Elite (300-500)')); await rankChangesChannel.send(`${member} was demoted to Veteran.`); } else if (pro && newNumber < 500) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Pro (500-650)')); await rankChangesChannel.send(`${member} was demoted to Elite.`); } else if (master && newNumber < 650) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Master (650-850)')); await rankChangesChannel.send(`${member} was demoted to Pro.`); } else if (grandmaster && newNumber < 850) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Grandmaster (850-999)')); await rankChangesChannel.send(`${member} was demoted to Master.`); } else if (legendary && newNumber < 1000) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Legendary (1000+)')); await rankChangesChannel.send(`${member} was demoted to Grandmaster.`); } } else { await interaction.followUp({content: `The player ${member} does not have any points yet`, ephemeral: true }); } } catch (error) { await interaction.followUp({content:`Not able to udpate the score of ${member}`, ephemeral: true }); } } else { await interaction.followUp({content: `The user if with ID ${userId} was not found`, ephemeral: true }); } } let ChangeScoreEmbed = new EmbedBuilder() .setTitle('SCORE CHANGE') .setColor("#9440F7") .addFields( {name: 'Winners:', value: `${PointsAddedUsers.join('\n')}`}, {name: 'Losers', value: `${PointsRemovedUsers.join('\n')}`}, ) .setFooter({text: `changes were made by ${interaction.user.tag}`, iconURL:interaction.user.displayAvatarURL()}) .setTimestamp() if(member) { try { const rank = member.roles.cache.map(role => role.name); for (const roleName of rank) { switch (roleName) { case 'Rookie (0-160)': points = 20; roleFound = true; break; case 'Veteran (160-300)': points = 20; roleFound = true; break; case 'Elite (300-500)': points = 15; roleFound = true; break; case 'Pro (500-650)': points = 10; roleFound = true; break; case 'Master (650-850)': points = 10; roleFound = true; break; case 'Grandmaster (850-999)': points = 5; roleFound = true; break; case 'Legendary (1000+)': points = 10; roleFound = true; break; } } if(!roleFound) { return interaction.followUp({content: `${member} does not have any rank yet`, ephemeral: true }); } const currentNickname = member.nickname || member.user.username; const numberMatch = currentNickname.match(/\d+/); if (numberMatch) { const currentNumber = parseInt(numberMatch[0], 10); const newNumber = currentNumber + points; const newNickname = currentNickname.replace( numberMatch[0], newNumber.toString() ); await member.setNickname(newNickname); tkResult =`${currentNickname} + ${points} -> ${newNickname}`; const rookie = member.roles.cache.find(r => r.name === 'Rookie (0-160)'); const veteran = member.roles.cache.find(r => r.name === 'Veteran (160-300)'); const elite = member.roles.cache.find(r => r.name === 'Elite (300-500)'); const pro = member.roles.cache.find(r => r.name === 'Pro (500-650)'); const master = member.roles.cache.find(r => r.name === 'Master (650-850)'); const grandmaster = member.roles.cache.find(r => r.name === 'Grandmaster (850-999)'); const legendary = member.roles.cache.find(r => r.name === 'Legendary (1000+)'); if(rookie && !veteran && newNumber >= 160) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Veteran (160-300)')); await rankChangesChannel.send(`${member} has just ranked up to Veteran. Congratulations!`); } else if (veteran && !elite && newNumber >= 300) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Elite (300-500)')); await rankChangesChannel.send(`${member} has just ranked up to Elite. Congratulations!`); } else if (elite && !pro && newNumber >= 500) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Pro (500-650)')); await rankChangesChannel.send(`${member} has just ranked up to Pro. Congratulations!`); } else if (pro && !master && newNumber >= 650) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Master (650-850)')); await rankChangesChannel.send(`${member} has just ranked up to Master. Congratulations!`); } else if (master && !grandmaster && newNumber >= 850) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Grandmaster (850-999)')) await rankChangesChannel.send(`${member} has just ranked up to Grandmaster. Congratulations!`); } else if (grandmaster && !legendary && newNumber >= 1000) { await member.roles.add(interaction.guild.roles.cache.find(r => r.name === 'Legendary (1000+)')) await rankChangesChannel.send(`${member} has just ranked up to Legendary. Congratulations!`); } ChangeScoreEmbed = new EmbedBuilder() .setTitle('SCORE CHANGE') .setColor("#9440F7") .addFields( {name: 'Winners:', value: `${PointsAddedUsers.join('\n')}`}, {name: 'Losers', value: `${PointsRemovedUsers.join('\n')}`}, {name: 'Top kills:', value: `${tkResult}`} ) .setFooter({text: `changes were made by ${interaction.user.tag}`, iconURL:interaction.user.displayAvatarURL()}) .setTimestamp() } else { await interaction.followUp({content: `Player ${member} does not have any rank yet`, ephemeral: true }); } } catch (error) { await interaction.followUp({content: `Not able to update the score of ${member}.`, ephemeral: true }); } } if(leftInput) { const leftMentions = leftInput.match(/<@!?(\d+)>/g); for (const mention of leftMentions) { const userId = mention.replace(/[<@!>]/g, ''); const member = guildMembers.get(userId); if (member) { try { const rank = member.roles.cache.map(role => role.name); for (const roleName of rank) { switch (roleName) { case 'Rookie (0-160)': points = 20; roleFound = true; break; case 'Veteran (160-300)': points = 20; roleFound = true; break; case 'Elite (300-500)': points = 20; roleFound = true; break; case 'Pro (500-650)': points = 30; roleFound = true; break; case 'Master (650-850)': points = 50; roleFound = true; break; case 'Grandmaster (850-999)': points = 50; roleFound = true; break; case 'Legendary (1000+)': points = 50; roleFound = true; break; } } if(!roleFound) { return interaction.followUp({content: `${member} does not have any rank yet`, ephemeral: true }); } const currentNickname = member.nickname || member.user.username; const numberMatch = currentNickname.match(/\d+/); if (numberMatch) { const currentNumber = parseInt(numberMatch[0], 10); let newNumber = currentNumber - points; if(newNumber < 0) { newNumber = 0 } const newNickname = currentNickname.replace( numberMatch[0], newNumber.toString() ); await member.setNickname(newNickname); LeftUsers.push(`${currentNickname} - ${points} -> ${newNickname}`) ChangeScoreEmbed = new EmbedBuilder() .setTitle('SCORE CHANGE') .setColor("#9440F7") .addFields( {name: 'Winners:', value: `${PointsAddedUsers.join('\n')}`}, {name: 'Losers', value: `${PointsRemovedUsers.join('\n')}`}, {name: 'Top kills:', value: `${tkResult}`}, {name: 'Left the match:', value: `${LeftUsers.join('\n')}`} ) .setFooter({text: `changes were made by ${interaction.user.tag}`, iconURL:interaction.user.displayAvatarURL()}) .setTimestamp() const veteran = member.roles.cache.find(r => r.name === 'Veteran (160-300)'); const elite = member.roles.cache.find(r => r.name === 'Elite (300-500)'); const pro = member.roles.cache.find(r => r.name === 'Pro (500-650)'); const master = member.roles.cache.find(r => r.name === 'Master (650-850)'); const grandmaster = member.roles.cache.find(r => r.name === 'Grandmaster (850-999)'); const legendary = member.roles.cache.find(r => r.name === 'Legendary (1000+)'); if(veteran && newNumber < 160) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Veteran (160-300)')); await rankChangesChannel.send(`${member} was demoted to Rookie.`); } else if (elite && newNumber < 300) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Elite (300-500)')); await rankChangesChannel.send(`${member} was demoted to Veteran.`); } else if (pro && newNumber < 500) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Pro (500-650)')); await rankChangesChannel.send(`${member} was demoted to Elite.`); } else if (master && newNumber < 650) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Master (650-850)')); await rankChangesChannel.send(`${member} was demoted to Pro.`); } else if (grandmaster && newNumber < 850) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Grandmaster (850-999)')); await rankChangesChannel.send(`${member} was demoted to Master.`); } else if (legendary && newNumber < 1000) { await member.roles.remove(interaction.guild.roles.cache.find(r => r.name === 'Legendary (1000+)')); await rankChangesChannel.send(`${member} was demoted to Grandmaster.`); } } else { await interaction.followUp({content: `The player ${member} does not have any points yet`, ephemeral: true }); } } catch (error) { await interaction.followUp({content: `Not able to udpate score of ${member}`, ephemeral: true }); } } else { await interaction.followUp({content: `The user if with ID ${userId} was not found`, ephemeral: true }); } } } await interaction.followUp({embeds: [ChangeScoreEmbed]}); }, };
Editor is loading...
Leave a Comment