You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js创建频道无法归入指定分类问题求助

Discord.js工单频道无法归入指定分类的解决方法

问题原因

你的代码中,当首次创建TICKETS分类时,category变量依然是undefined——因为你只是创建了分类,但没有把新创建的分类对象赋值给category,导致后续创建频道时parent: category没有生效,频道自然不会归入分类。

另外还有两个小问题:

  • 创建分类时的deny参数写法不符合Discord.js v14+的规范,应该用permissionOverwrites配置权限。
  • 新创建的工单频道没有配置权限,普通用户会看不到自己的工单频道。

修复后的完整代码

const { ChannelType, EmbedBuilder, Colors, PermissionsBitField } = require('discord.js');

const guild = interaction.guild; 
const user = interaction.user; 
const ticketChannelName = `ticket-${user.username}`;

// 查找或创建TICKETS分类
let category = guild.channels.cache.find(c => c.name === 'TICKETS' && c.type === ChannelType.GuildCategory);

if (!category) {
    // 创建分类并赋值给category变量
    category = await guild.channels.create({
        name: 'TICKETS', 
        type: ChannelType.GuildCategory, 
        permissionOverwrites: [
            // 默认禁止所有成员查看分类
            {
                id: guild.roles.everyone,
                deny: [PermissionsBitField.Flags.ViewChannel]
            }
        ]
    });
}

// 检查用户是否已有工单频道
const existingChannel = guild.channels.cache.find(c => c.name === ticketChannelName && c.type === ChannelType.GuildText);
if (existingChannel) {
    const embed = new EmbedBuilder()
        .setTitle('Hata!')
        .setDescription('Zaten bir ticket oluşturmuşsunuz.')
        .setColor(Colors.Red)
        .setTimestamp();

    return await interaction.reply({ embeds: [embed], ephemeral: true });
}

// 创建工单频道并归入分类
const ticketChannel = await guild.channels.create({
    parent: category.id, // 可传分类对象或分类ID
    name: ticketChannelName, 
    type: ChannelType.GuildText, 
    permissionOverwrites: [
        // 禁止全体成员查看
        {
            id: guild.roles.everyone,
            deny: [PermissionsBitField.Flags.ViewChannel]
        },
        // 允许创建工单的用户查看和发送消息
        {
            id: user.id,
            allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages]
        }
    ]
});

// 回复用户工单已创建
await interaction.reply({ 
    content: `Ticket oluşturuldu: ${ticketChannel}`, 
    ephemeral: true 
});

关键修复点

  • 创建新分类后,将返回的分类对象赋值给category变量,确保后续创建频道时parent参数有效。
  • 使用permissionOverwrites替代旧的deny参数,符合Discord.js v14+的API规范。
  • 给工单频道添加权限配置,让创建者能正常访问自己的工单频道。

内容的提问来源于stack exchange,提问作者787 xd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:27:38