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

discord.py如何将新建的文本、语音频道移动到指定分类频道下?

修正方案

原代码核心问题

  • 反复覆盖channel变量,创建的分类、文本、语音频道对象全部丢失,无法后续操作
  • 调用的服务器属性错误,不存在ctx.guild.category,正确集合属性是ctx.guild.categories
  • 错误修改了触发命令的原频道ctx.channel,而非自己新创建的两个频道
  • 额外执行了无意义的分类查询操作,创建分类时直接保存对象即可,不需要二次查找

最优实现代码

创建文本/语音频道时直接指定category参数,不需要事后移动频道,一步完成需求:

@bot.command()
async def room(ctx, name):
    guild = ctx.guild
    member = ctx.author
    overwrites = {
        guild.default_role: discord.PermissionOverwrite(read_messages=False),
        member: discord.PermissionOverwrite(read_messages=True),
    }
    # 先创建分类,单独保存分类对象
    category = await guild.create_category_channel(name, overwrites=overwrites)
    # 创建文本频道时直接指定归属分类
    text_channel = await guild.create_text_channel(name, overwrites=overwrites, category=category)
    # 创建语音频道时直接指定归属分类
    voice_channel = await guild.create_voice_channel(name, overwrites=overwrites, category=category)
    # 可选:给用户发送创建成功提示
    await ctx.send(f"专属频道组 {name} 已创建完成")

事后移动频道的写法

如果确实需要先创建频道再修改归属,用以下逻辑即可:

# 已经创建好分类对象category、文本频道对象text_channel、语音频道对象voice_channel的前提下
await text_channel.edit(category=category)
await voice_channel.edit(category=category)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:09:00