如何修改discord.py工单命令,使其在指定分类下创建频道?
如何将Discord工单频道创建到指定分类下?
要实现将工单频道创建到指定分类中,核心是在调用create_text_channel方法时,新增category参数指定目标分类对象。以下是具体修改步骤和完整代码:
关键修改点
- 获取目标分类对象:可以通过分类ID(更稳定)或分类名称两种方式获取
- 创建频道时指定分类:在
create_text_channel中添加category参数
修改后的完整代码
@bot.command() async def support(ctx, *, reason = None): guild = ctx.guild user = ctx.author await ctx.message.delete() # 删除用户的命令消息 # 获取目标分类(二选一即可) # 方式一:通过分类ID获取(替换为你的实际分类ID) target_category = guild.get_channel(123456789012345678) # 方式二:通过分类名称获取(替换为你的实际分类名称) # target_category = next((cat for cat in guild.categories if cat.name == "工单专区"), None) # 检查分类是否存在,避免报错 if not target_category: await ctx.send("未找到指定的工单分类,请检查配置!", delete_after=5) return overwrites = { guild.default_role: discord.PermissionOverwrite(read_messages=False), user: discord.PermissionOverwrite(read_messages=True, send_messages=True) } # 创建频道时指定分类 channel = await guild.create_text_channel( f'Ticket {user}', overwrites=overwrites, category=target_category # 核心:指定分类 ) await channel.send(f"{user.mention}") supem = discord.Embed(title=f"{user} 创建了工单", description= "", color=0x00ff00) supem.add_field(name="工单原因", value=f"``{reason or '未填写'}``") supem.set_footer(text=f"工作人员很快会为你提供帮助") await channel.send(embed=supem)
说明
- 推荐使用分类ID方式获取分类,因为分类名称可能被修改,而ID是服务器内固定不变的
- 添加了分类不存在的判断逻辑,避免因配置错误导致命令报错
- 若使用名称匹配方式,
next()函数会返回第一个匹配名称的分类,若没有匹配则返回None
内容的提问来源于stack exchange,提问作者Bailey Norris
相关产品推荐
相关产品推荐

