Skip to content
Advertisement

Is there a current way to create a discord channel then select it later on?

Currently, I have been working on a Discord.js bot for a discord server I have. I want to make a command so that a user can open a ticket using !oticket and it will make a new channel that all of their dms to the bot will come through. I have working code for the channel creation, but when I tried to add an if statement to make it so that if someone has a ticket already opened they couldn’t open another one, I couldn’t find a working way to select a channel by its name.

Here is my current code:

var test = msg.guild.channels.find(channel => channel.name === msg.author.username); //Outputs null even if a channel with their username already exists
    console.log(test);
    if (!msg.guild.channels.find(channel => channel.name === msg.author.username)) { // Passes even if a channel with their username already exists
        
    var server = msg.guild; //Works fine
    var name = msg.author.username; //Works fine

    server.createChannel(name, { //Works fine
        type: "text",
        parent: client.channels.get("834963781342724096"),
        
    }); //Works fine
        
    } else {
        msg.reply("You already have an open ticket!")
    }

I know that finding a channel by its name is impractical but this bot will only be on my server.

Advertisement

Answer

You can use a map where you can set a value when the user has created a ticket what would look like this:

const ticketmap = new Map();


if(ticketmap.get(msg.author.id)) return message.reply(`You already have an open ticket!`);
    
var server = msg.guild; //Works fine
var name = msg.author.username; //Works fine

server.createChannel(name, { //Works fine
    type: "text",
    parent: client.channels.get("834963781342724096"),
    
}).then(ch => {
    ticketmap.set(msg.author.id, ch.id);
});
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement