微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决TypeError on_message缺少1个必需的位置参数:“ ctx”

每次我输入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',color=0x001fff )
        await ctx.send(embed=embed)```

解决方法

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',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',color=0x001fff )
            await message.channel.send(embed=embed)


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

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

async def on_message(message):

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。