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
相关产品推荐
相关产品推荐

