如何在Discord.py中复制整个分类并删除原分类?
实现Discord分类频道的批量刷新(克隆+替换)
由于Discord API没有直接克隆整个分类的方法,我们可以通过先克隆分类本身,再逐个克隆分类下的所有子频道的方式实现需求,具体步骤和代码如下:
核心思路
- 定位目标分类(可基于命令上下文自动获取,或允许用户指定)
- 克隆原分类,保留其名称、权限、位置等核心设置
- 按原顺序遍历原分类下的所有频道,逐个克隆到新分类中,保留频道的类型、权限、顺序等属性
- 确认所有频道克隆完成后,删除原分类(原分类下的子频道会被一并删除)
代码实现
基础版本(基于上下文自动获取分类)
@bot.command(name="refresh-category", aliases=["rc"]) @commands.has_permissions(manage_channels=True) async def refresh_category(ctx): # 获取当前命令所在频道的父分类 original_category = ctx.channel.category if not original_category: await ctx.send("当前频道不属于任何分类,无法执行刷新操作!") return # 克隆原分类,保留原配置 new_category = await original_category.clone(reason="执行分类刷新命令") # 按原顺序克隆所有子频道到新分类 for channel in original_category.channels: await channel.clone( reason="分类刷新同步频道", category=new_category, position=channel.position # 保持频道顺序与原分类一致 ) # 删除原分类,完成替换 await original_category.delete(reason="分类刷新完成,删除原分类") await ctx.send(f"分类「{original_category.name}」已成功刷新!")
进阶版本(支持指定分类名称)
如果需要在任意频道执行命令并指定目标分类,可以添加分类名称参数:
@bot.command(name="refresh-category", aliases=["rc"]) @commands.has_permissions(manage_channels=True) async def refresh_category(ctx, *, category_name: str=None): # 处理用户指定分类的情况 if category_name: original_category = discord.utils.get(ctx.guild.categories, name=category_name) if not original_category: await ctx.send(f"服务器内找不到名为「{category_name}」的分类!") return # 未指定分类时,使用当前频道的父分类 else: original_category = ctx.channel.category if not original_category: await ctx.send("当前频道不属于任何分类,请指定要刷新的分类名称!") return # 克隆分类与频道的逻辑和基础版本一致 new_category = await original_category.clone(reason="执行分类刷新命令") for channel in original_category.channels: await channel.clone( reason="分类刷新同步频道", category=new_category, position=channel.position ) await original_category.delete(reason="分类刷新完成,删除原分类") await ctx.send(f"分类「{original_category.name}」已成功刷新!")
注意事项
- 权限要求:执行命令的用户需要拥有
manage_channels权限(比原命令的manage_messages更贴合频道管理场景) - 频道属性保留:
clone方法会自动保留频道的类型(文本/语音/公告)、权限设置、名称、主题等属性 - 顺序一致性:通过指定
position参数,确保新分类内的频道顺序与原分类完全一致 - 删除逻辑:删除原分类时,其下所有子频道会被Discord自动删除,无需单独处理
内容的提问来源于stack exchange,提问作者TheShadowKnows
相关产品推荐
相关产品推荐

