Untitled
unknown
javascript
8 months ago
31 kB
3
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