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

discord.py开发Discord机器人时Cog内ping命令报错缺少ctx参数如何解决?

问题排查与解决方案

错误根源

从报错信息和代码可以定位到2个核心错误:

  • Cog类内的命令装饰器使用错误:Cog类内部定义命令不能用@bot.command,必须使用@commands.command()装饰器。类内的异步方法第一个参数默认是类实例本身self,你之前的写法把第一个参数命名为ctx,实际接收到的是autoreply类的实例,discord.py找不到预期的ctx参数,才会抛出参数缺失的错误。
  • Cog文件内重复实例化Bot:你在auto-reply.py里再次执行bot = commands.Bot(command_prefix=">")创建了新的Bot实例,这个实例没有实际运行,还会和main.py里的主Bot实例产生冲突,属于完全多余的代码。

修复步骤

直接替换auto-reply.py的全部代码为以下内容即可:

import discord
from discord.ext import commands

class autoreply(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command(name="ping")
    async def yo(self, ctx: commands.Context):
        await ctx.send("pong")

def setup(bot):
    bot.add_cog(autoreply(bot))

修复说明

  • 删掉了Cog文件内多余的Bot实例化代码
  • 把命令装饰器换成了Cog专用的@commands.command()
  • 在命令方法的参数里第一个位置加了self,第二个位置才是ctx,符合Python类方法的参数规则

修改完成后重新启动main.py,调用>ping命令就可以正常返回pong。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:03