client.on('ready', () => {
command(client, 'createcategory', (message) => {
const name = message.content.replace('!createcategory ', '')
if(message.guild.channels.cache.find(c => c.name == message.author.username && c.type == "category") === undefined){
message.guild.channels.create(message.author.username, {type: 'category', permissionOverwrites: [
{
id: message.guild.id,
deny: ['VIEW_CHANNEL'],
},
{
id: message.author.id,
allow: ['VIEW_CHANNEL'],
},
]})
message.guild.channels.create('Text channel', {type: 'text', permissionOverwrites: [
{
id: message.guild.id,
deny: ['VIEW_CHANNEL'],
},
{
id: message.author.id,
allow: ['VIEW_CHANNEL'],
},
]}).then(channel => {
let category = message.guild.channels.cache.find(c => c.name == message.author.username && c.type == "category");
if (!category) throw new Error("Category channel does not exist");
channel.setParent(category.id);
}).catch(console.error);
message.guild.channels.create('Voice channel', {type: 'voice', permissionOverwrites: [
{
id: message.guild.id,
deny: ['VIEW_CHANNEL'],
},
{
id: message.author.id,
allow: ['VIEW_CHANNEL'],
},
]}).then(channel => {
let category = message.guild.channels.cache.find(c => c.name == message.author.username && c.type == "category");
if (!category) throw new Error("Category channel does not exist");
channel.setParent(category.id);
}).catch(console.error);
} else {message.send('Jau tu turi kanala, kurviuk tu')}
});
});
The code used to work, but somehow I forgot what I did with it and didn’t code for 2 months or so…
The function should be – when you write !createcategory it should create a category with voice and text channels in it. The category should be named by your user name. There is no error in the console, please help, thanks!
Advertisement
Answer
I’m not sure what’s causing your issue, but try setting the parent of the text and voice channels when you create the channel:
// GuildChannelManager#create returns the channel you created
message.guild.channels.create(message.author.username, {
type: 'category',
permissionOverwrites: [
{id: message.guild.id, deny: ['VIEW_CHANNEL']},
{id: message.author.id, allow: ['VIEW_CHANNEL']},
]
}).then(parent => {
// Create the text channel
message.guild.channels.create('Text channel', {
type: 'text',
// under the parent category
parent, // shorthand for parent: parent
permissionOverwrites: [
{id: message.guild.id, deny: ['VIEW_CHANNEL']},
{id: message.author.id, allow: ['VIEW_CHANNEL']},
]
}).catch(console.error)
// Same with the voice channel
message.guild.channels.create('Voice channel', {
type: 'voice',
parent,
permissionOverwrites: [
{id: message.guild.id, deny: ['VIEW_CHANNEL']},
{id: message.author.id, allow: ['VIEW_CHANNEL']},
]
}).catch(console.error)
})
You could also use ES2017’s async/await:
// Must be an async function vvvvv
command(client, 'createcategory', async (message) => {
// ...
const parent = await message.guild.channels.create(/* ... */)
try {
// Run the promises concurrently, like in your code
await Promise.all([
message.guild.channels.create('Text channel', {/* ... */})
message.guild.channels.create('Voice channel', {/* ... */)
])
} catch (error) {
console.error(error)
}
// ...
})