Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
101 views
in Technique[技术] by (71.8m points)

javascript - How to create a Discord channel with parent?

I'm making a Discord bot in discord.js. I have a function that does this:

function createChannel() {
  randomString = crypto.randomBytes(12).toString('hex');
  const randomCategory = message.guild.channels.create(randomString, {
    type: 'category',
    permissionOverwrites: [
      {
        id: message.guild.id,
        allow: ['VIEW_CHANNEL'],
      },
    ],
  });

  message.guild.channels.create(randomString, {
    type: 'text',
    parent: randomCategory.id,
    permissionOverwrites: [
      {
        id: message.guild.id,
        allow: ['VIEW_CHANNEL'],
      },
    ],
  });

  message.guild.channels.create(randomString, {
    type: 'voice',
    parent: randomCategory.id,
    permissionOverwrites: [
      {
        id: message.guild.id,
        allow: ['VIEW_CHANNEL'],
      },
    ],
  });
}

This should create a category, and populate it with a voice and text channel with the same name. However, when I run it the channels don't get their parent set correctly.

question from:https://stackoverflow.com/questions/65941857/how-to-create-a-discord-channel-with-parent

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

guild.channels.create returns a promise so you either need to use the .then() method or async-await to get randomCategory. At the moment it's just a pending promise, not the returned category:

// make the function an async function
async function createChannel() {
  randomString = crypto.randomBytes(12).toString('hex');
  // use await to wait the promise to resolve
  const randomCategory = await message.guild.channels.create(randomString, {
    type: 'category',
    permissionOverwrites: [
      {
        id: message.guild.id,
        allow: ['VIEW_CHANNEL'],
      },
    ],
  });

  message.guild.channels.create(randomString, {
    type: 'text',
    // pass the randomCategory object, not just the id
    parent: randomCategory,
    permissionOverwrites: [
      {
        id: message.guild.id,
        allow: ['VIEW_CHANNEL'],
      },
    ],
  });

  message.guild.channels.create(randomString, {
    type: 'voice',
    // pass the randomCategory object, not just the id
    parent: randomCategory,
    permissionOverwrites: [
      {
        id: message.guild.id,
        allow: ['VIEW_CHANNEL'],
      },
    ],
  });
}

It seems to be working fine:

enter image description here


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...