如何使用discord.js删除现有分类与频道后创建新的频道?
前置注意事项
- 机器人账号需要拥有目标服务器的
管理频道权限,否则所有频道操作都会报错 - 以下代码基于discord.js v12版本编写,若你使用v13/v14版本,接口参数存在少量差异,可对应调整适配
实现逻辑说明
- 批量删除服务器内所有现有频道/分类:调用
message.guild.channels.cache获取所有频道实例,遍历调用delete()方法即可 - 删除完成后按需求创建新分类、新频道,
type参数指定为category就是分类,text是文字频道,voice是语音频道
修改后的完整代码
const Discord = require('discord.js'); const client = new Discord.Client(); const { prefix, token } = require('./config.json'); client.once('ready', () => { console.log('Ready!'); }); client.login(token); client.on("message", async (message) => { // 仅服务器管理员可触发指令,避免滥用 if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("你没有权限执行该操作"); if (message.content == "server") { try { await message.guild.setIcon("./icon.png"); await message.guild.setName("server"); message.channel.send("服务器基础信息修改完成,开始执行频道重构..."); // 第一步:删除所有现有频道和分类 const allChannels = message.guild.channels.cache; for (const channel of allChannels.values()) { await channel.delete().catch(err => console.log(`删除频道${channel.name}失败:`, err)); } message.channel.send("现有频道/分类已全部删除,开始创建新频道结构..."); // 第二步:创建新的频道结构,可按需求自定义调整 // 1. 创建信息分类 const infoCategory = await message.guild.channels.create("信息区", { type: "category", position: 0 }); // 2. 信息分类下的文字频道 await message.guild.channels.create("公告", { type: "text", parent: infoCategory.id }); await message.guild.channels.create("规则", { type: "text", parent: infoCategory.id }); // 3. 创建聊天分类 const chatCategory = await message.guild.channels.create("聊天区", { type: "category", position: 1 }); // 4. 聊天分类下的频道 await message.guild.channels.create("闲聊", { type: "text", parent: chatCategory.id }); await message.guild.channels.create("开黑大厅", { type: "voice", parent: chatCategory.id }); message.channel.send("服务器重构完成!"); } catch (err) { console.log(err); message.channel.send("重构服务器过程中出现未知错误,请检查机器人权限后重试。"); } } });
自定义调整说明
- 你可以根据自身需求修改创建频道的名称、类型、分类归属、排序位置等参数
- 如果需要保留部分特殊频道(比如社区服务器的规则频道、验证频道),可以在遍历删除的时候加判断条件跳过对应频道即可
- 如果频道数量较多,可添加延时逻辑避免触发Discord的接口请求频率限制
内容的提问来源于stack exchange,提问作者Stylerr.
相关产品推荐
相关产品推荐

