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

discord.py报错Ctx为必填缺失参数 同组子命令部分失效问题咨询

问题修复点

  • make c 子命令无法运行的核心原因:错误调用了ctx.create_category_channel()方法,ctx上下文对象本身不提供创建分类频道的方法,该方法属于Guild对象,应改为 await ctx.guild.create_category_channel(name=name)
  • 所有子命令else分支的ctx.send()都缺少await关键字,discord.py 中所有异步消息发送方法都需要添加await才会执行,否则会抛出协程未等待的警告,方法也不会实际运行
  • make n 子命令装饰器参数拼写错误:pass_contex应为pass_context,缺少末尾的t字符
  • 接收category参数的子命令(t、v、n)未做参数转换:create_text_channel/create_voice_channel的category参数要求传入实际的Category对象,而非字符串名称,如果你需要支持传入分类名称,需要提前通过discord.utils.get(ctx.guild.categories, name=category)转换为对应对象再传入
  • make v 子命令存在变量名不匹配问题:你定义的变量名为channel,但判断条件写的是if existing_channel is None,运行会抛出NameError

修复后完整代码

import discord
from discord.ext import commands
from datetime import datetime

# 此处省略Cog类定义部分
@commands.group()
async def make(self, ctx):
    """make channel c,t,v,n [name]"""
    if ctx.invoked_subcommand is None:
        await ctx.send('Invalid sub command passed...')

@make.command(pass_context=True, aliases=['category'])
async def c(self, ctx, name):
    """create Category"""
    existing_category = discord.utils.get(ctx.guild.categories, name=name)
    if existing_category is None:
        # 修复:改为调用guild的create_category_channel方法
        await ctx.guild.create_category_channel(name=name)
        embed = discord.Embed(title=f"Creating {name}", color=0x5cbac4, timestamp=datetime.now())
        await ctx.send(embed=embed)
        await ctx.send(f"{discord.utils.get(ctx.guild.categories, name=name).mention}")
    else:
        # 修复:添加await
        await ctx.send(f"{name} already exists")

@make.command(pass_context=True, aliases=['text', "Text"])
async def t(self, ctx, name, category_name=None):
    """create Text channel"""
    # 新增:处理category参数转换
    category = None
    if category_name:
        category = discord.utils.get(ctx.guild.categories, name=category_name)
    channel = discord.utils.get(ctx.guild.channels, name=name, category=category)
    if channel is None:
        await ctx.guild.create_text_channel(name=name, category=category)
        embed = discord.Embed(title=f"Creating {name}: ", color=0x5cbac4,
                              timestamp=datetime.now())
        await ctx.send(embed=embed)
        await ctx.send(f"{discord.utils.get(ctx.guild.channels, name=name).mention}")
    else:
        # 修复:添加await
        await ctx.send(f"{name} already exists")

@make.command(pass_context=True, aliases=['voice', "Voice"])
async def v(self, ctx, name, category_name=None):
    """create Voice channel"""
    # 新增:处理category参数转换
    category = None
    if category_name:
        category = discord.utils.get(ctx.guild.categories, name=category_name)
    existing_channel = discord.utils.get(ctx.guild.channels, name=name, category=category)
    if existing_channel is None:
        await ctx.guild.create_voice_channel(name=name, category=category)
        embed = discord.Embed(title=f"Creating {name}: ", color=0x5cbac4,
                              timestamp=datetime.now())
        await ctx.send(embed=embed)
        await ctx.send(f"{discord.utils.get(ctx.guild.channels, name=name).mention}")
    else:
        # 修复:添加await
        await ctx.send(f"{name} already exists")

@make.command(pass_context=True, aliases=['nsfw', "NSFW"])
@commands.has_permissions(manage_channels=True)
async def n(self, ctx, name, category_name=None):
    # 新增:处理category参数转换
    category = None
    if category_name:
        category = discord.utils.get(ctx.guild.categories, name=category_name)
    existing_channel = discord.utils.get(ctx.guild.channels, name=name, category=category)
    if existing_channel is None:
        await ctx.guild.create_text_channel(name=name, category=category, nsfw=True)
        embed = discord.Embed(title=f"Creating {name}:", color=0x5cbac4, timestamp=datetime.now())
        await ctx.send(embed=embed)
        await ctx.send(f"{discord.utils.get(ctx.guild.channels, name=name).mention}")
    else:
        # 修复:添加await
        await ctx.send(f"{name} already exists")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:27:00