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
相关产品推荐
相关产品推荐

