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

