TypeError。 on_message()缺少1个必需的位置参数:“ ctx”

时间:2020-09-30 12:52:41

标签: python discord discord.py discord.py-rewrite traceback

每次我输入hey i

时,我都会尝试创建一个自动响应机器人,以提供类似自动支持的功能

机器人输出以下错误:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\lequi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'ctx'

但是我在功能上做了ctx,所以我不知道代码有什么问题 我希望你们能帮助我:D

如果可以的话,请帮助我:D

@bot.event
async def on_message(message, ctx):
    if 'hey' in message.content.lower():
        if 'i' in message.content.lower():
            embed = discord.Embed(title=f'test',description=f'**test** : ``test``', color=0x001fff )
            await ctx.send(embed=embed)


    if 'test' in message.content.lower():
        embed = discord.Embed(title=f'test',description=f'**test** : ``test``', color=0x001fff )
        await ctx.send(embed=embed)```

2 个答案:

答案 0 :(得分:2)

on_message仅具有1个输入参数(请参见documentation)。

因此您的代码:

@bot.event
async def on_message(message, ctx):
    if 'hey' in message.content.lower():
        if 'i' in message.content.lower():
            embed = discord.Embed(title=f'test',description=f'**test** : ``test``', color=0x001fff )
            await ctx.send(embed=embed)


    if 'test' in message.content.lower():
        embed = discord.Embed(title=f'test',description=f'**test** : ``test``', color=0x001fff )
        await ctx.send(embed=embed)

在您指定2个输入参数而不是1个输入参数时不正确(即您要添加一个新的必需位置参数)。


那么现在的问题是为什么它说:TypeError. on_message() missing 1 required positional argument: 'ctx'

很简单,执行on_message事件的过程没有所谓的“ ctx”的第二个输入参数,因为它预期只有1个输入参数,而不是2个。因此抛出此错误。


删除ctx将解决问题,如果没有,则您有其他代码在干扰(您没有显示的内容)。下面是如何执行此操作的示例。

@bot.event
async def on_message(message):
    if 'hey' in message.content.lower():
        if 'i' in message.content.lower():
            embed = discord.Embed(title=f'test',description=f'**test** : ``test``', color=0x001fff )
            await message.channel.send(embed=embed)


    if 'test' in message.content.lower():
        embed = discord.Embed(title=f'test',description=f'**test** : ``test``', color=0x001fff )
        await message.channel.send(embed=embed)

答案 1 :(得分:1)

根据documentation on_message仅接受1个参数,即message。要解决此问题,您只需删除ctx作为参数。

async def on_message(message):

但是我在功能上做了ctx,所以我不知道代码有什么问题,希望你们能帮助我:D

您有一个额外的参数ctx,该参数不应存在。结果,Discord将调用此事件,并且永远不会在其中传递ctx,因此所调用的函数将缺少1个参数,从而引发该错误。该错误不是不是,这意味着您没有将其添加到函数签名中,但是没有通过调用它的方法将传递给函数。