Skip to content
Advertisement

Discord JS, my users are able to create unlimited ticket channels when they react to the emoji

Users are able to create unlimited ticket channels when they react on 🎫 this emoji, what part do I miss in my script so that users are only able to create one ticket until they close it again?

My bots ID below is: 701327880046510080

Any help would be appreciated! 🙂

bot.on('messageReactionAdd', async (reaction, user, channel) => {
        if(user.partial) await user.fetch();
        if(reaction.partial) await reaction.fetch();
        if(reaction.message.partial) await reaction.message.fetch();
        if(user.bot) return;
        
        let ticketid = await settings.get(`${reaction.message.guild.id}-ticket`);
        
        if(!ticketid) return;
        
        
        if(reaction.message.id == ticketid && reaction.emoji.name == '🎫') {
            reaction.users.remove(user);
            const ticketChannel = reaction.message.guild.channels.cache.find(chan => chan.name === `ticket-${user.username}`)
            if (ticketChannel) return;
            reaction.message.guild.channels.create(`ticket-${user.username}`, {
                parent: '701254271861260389',
                position: 1,
                permissionOverwrites: [
                    {
                        id: '701327880046510080',
                        allow: ["MANAGE_CHANNELS", "MANAGE_GUILD", "MANAGE_ROLES", "MANAGE_EMOJIS", "READ_MESSAGE_HISTORY", "MANAGE_MESSAGES", "SEND_MESSAGES", "VIEW_CHANNEL"]
                    },
                    {
                        id: user.id,
                        allow: ["SEND_MESSAGES", "VIEW_CHANNEL", "READ_MESSAGE_HISTORY"]
                    },
                    {
                        id: reaction.message.guild.roles.everyone,
                        deny: ["VIEW_CHANNEL"]
                    },
                    {
                        id: '306893721725829121',
                        allow: ["SEND_MESSAGES", "VIEW_CHANNEL", "READ_MESSAGE_HISTORY"]
                    }
                ],
                type: 'text'
            }).then(async channel => {
                EMBED STUFF ..irrelevant. <-ignore this
                send.react("🔒")
            })
        }
        if(reaction.emoji.name == '🔒'){
            if(!reaction.message.channel.name.includes("ticket-")) return;
            reaction.users.remove(user);
            
            reaction.message.channel.delete()
        }
    })

Advertisement

Answer

Add these lines to your code

bot.on('messageReactionAdd', async (reaction, user, channel) => {
        if(user.partial) await user.fetch();
        if(reaction.partial) await reaction.fetch();
        if(reaction.message.partial) await reaction.message.fetch();
        if(user.bot) return;
        
        let ticketid = await settings.get(`${reaction.message.guild.id}-ticket`);
        
        if(!ticketid) return;

// add below here        
        const existing = bot.channels.cache.find(c => c.name === `ticket-${user.username}`)

        if (existing) {
            return reaction.message.reply({
                content: `You already have a ticket open, please close it first before creating a new one. See the ${existing} channel`
            });
        }
// add above here

// rest of code
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement