Discord.js如何检查指定分类下频道是否存在后再新建频道
解决方案
核心逻辑说明
- 先从服务器频道缓存中筛选出目标分类下的所有文本频道,匹配名称判断是否已存在
- 将待创建的频道名称存入数组批量处理,避免重复写判断逻辑
- 仅当匹配不到对应频道时才执行创建操作
完整修改后代码
const Discord = require('discord.js'); const disbut = require('discord-buttons'); const client = new Discord.Client(); // 注意:原代码中此行多余,Guild实例无需手动实例化,使用message.guild即可 // const guild = new Discord.Guild(); const { prefix, token, categoryID } = require('./config.json'); const { MessageEmbed } = require('discord.js'); const command = require('./command'); client.on('ready', () => { console.log('The client is ready!') }); client.login(token); const embed = new MessageEmbed() .setTitle("Title") .setColor("#ff00ff") .setDescription("Description") .setFooter("Footer") .setImage("myimage") .setTimestamp() client.on("message", async (message) => { if (message.content == "server") { try { await message.guild.setIcon('./icon.png'); await message.guild.setName("My Server"); // 待创建的频道名称数组 const channelsToCreate = ["channel1", "channel2", "channel3", "channel4"]; // 循环批量处理 for (const channelName of channelsToCreate) { // 检查指定分类下是否存在同名文本频道 const isExist = message.guild.channels.cache.some(channel => channel.type === 'text' && channel.parentID === categoryID && channel.name === channelName ); // 不存在则创建 if (!isExist) { await message.guild.channels.create(channelName, { type: 'text', parent: categoryID }); } } message.channel.send({embed}); } catch { message.channel.send("Unknown error occurred."); } } });
注意事项
- 本代码适配Discord.js v12版本,如果你使用v13及以上版本,需要将
channel.type === 'text'修改为channel.type === 'GUILD_TEXT',parentID修改为parentId - 请确保机器人拥有
管理频道权限,否则会创建失败
内容的提问来源于stack exchange,提问作者Stylerr.
相关产品推荐
相关产品推荐

