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

Discord.py运行时无法在用户指定分类下创建频道问题求助

Discord机器人频道分类匹配错误排查

以下是代码中存在的问题点:

  • 获取到的y是完整的discord.Message对象,而非用户输入的文本内容,直接将y作为分类名称参数传入discord.utils.get会永远匹配不到对应分类,需要取y.content获取用户输入的文本。
  • 没有做空值校验:如果用户输入的分类名不存在、拼写错误,z会返回None,此时create_text_channel方法会忽略category参数,直接将频道创建在服务器根目录。
  • 未做权限校验:机器人需要同时拥有服务器的管理频道权限,以及对应分类的「查看频道」「管理频道」权限,否则也会出现分类赋值失败的情况。
  • 匹配规则过于严格:Discord分类名称对大小写、前后空格敏感,用户输入时多打空格、大小写不一致都会导致匹配失败,建议添加字符串清洗逻辑。
  • wait_for未添加过滤条件:如果有其他用户在超时时间内发送消息,会拿到错误的输入内容,导致分类匹配失败。

修正后的参考代码

if sly.content.startswith("sly ctchan"):
    x = sly.content.split("sly ctchan ",1)[1].strip()
    await sly.channel.send("请输入要归属的分类名称:")
    
    # 定义过滤规则:只接收发命令的用户的消息
    def check(msg):
        return msg.author == sly.author and msg.channel == sly.channel
    
    try:
        y = await client.wait_for('message', timeout=15.0, check=check)
        category_name = y.content.strip()
        # 可以改为大小写不敏感匹配,按需开启
        # z = discord.utils.get(sly.guild.categories, name=lambda n: n.lower() == category_name.lower())
        z = discord.utils.get(sly.guild.categories, name=category_name)
        if not z:
            await sly.channel.send("未找到对应分类,请检查名称是否正确")
            return
        # 验证机器人权限
        if not sly.guild.me.guild_permissions.manage_channels:
            await sly.channel.send("机器人没有管理频道的权限,无法创建频道")
            return
        await sly.guild.create_text_channel(x, overwrites=None, category=z)
        await sly.channel.send(f"已成功在分类 {category_name} 下创建频道 {x}")
    except TimeoutError:
        await sly.channel.send("等待输入超时,操作已取消")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:27:06