Untitled

 avatar
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