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

Discord.py v2.0(Replit环境)添加Cogs模块触发TypeError报错的技术求助

解决Discord.py v2.0中Cogs命令的参数错误问题

我一眼就定位到问题所在了——你写的Cog命令方法漏掉了关键的self参数!

先看报错的核心提示:

TypeError: Command signature requires at least 1 parameter(s)

这个错误直接指向Ticket.py里的hello方法(也就是你定义的.ticket命令)。在Discord.py的Cog类中,所有命令方法必须把self作为第一个参数,因为它们是类的实例方法,需要访问类的属性(比如你代码里的self.bot)。你现在的方法定义是:

@commands.command(name="ticket")
async def hello(ctx):

这里缺少了self,导致discord.py在解析命令签名时判定参数数量不达标——Cog的命令方法默认要求至少一个参数(self),加上ctx才是正确的参数结构。

修复步骤

只需要修改Ticket.py中的命令方法,把self加到参数列表的最前面:

@commands.command(name="ticket")
async def hello(self, ctx):

修改后的完整Ticket.py代码如下:

import discord
from discord.ext import commands
from replit import db

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

    @commands.command(name="ticket")
    async def hello(self, ctx):  # 新增self参数
        tks = discord.ui.Select(placeholder="Choose Your Help!",options=[discord.SelectOption(label="Support", emoji="", default=True), discord.SelectOption(label="Idea", emoji="")])
        acbtn = discord.ui.Button(label="Create Ticket", style=discord.ButtonStyle.green, emoji="")

        async def choose(inter):
            try:
                count = db["servers"][f"{ctx.message.guild.id}"]["ticket_count"] + 1
            except:
                db["servers"][f"{ctx.message.guild.id}"] = {"ticket_count":0}
                count = db["servers"][f"{ctx.message.guild.id}"]["ticket_count"] + 1
            await inter.response.send_message(f"Ticket: {tks.values[0]}-{count}", ephemeral=True)
            db["servers"][f"{ctx.message.guild.id}"]["ticket_count"] += 1
            guild = ctx.message.guild
            await guild.create_text_channel(f"ticket: {tks.values[0]}-{count}")

        async def change(inte):
            await inte.response.send_message(f"You changed the subject to {tks.values[0]}", ephemeral=True)

        tks.callback = change
        acbtn.callback = choose
        vitks = discord.ui.View()
        vitks.add_item(tks)
        vitks.add_item(acbtn)
        await ctx.send("Open A Ticket!", view=vitks)

async def setup(bot):
    await bot.add_cog(Tickets(bot))

补充说明

这个问题和discord.py版本升级无关,哪怕是1.7.3版本的Cog也需要遵循这个规则——只是你之前没用到Cogs,所以没触发这个参数校验错误而已。Cog作为类扩展机制,所有命令都是类的实例方法,必须通过self来引用类实例本身,这是Python类方法的基础规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:47:35