类型错误。 on_message() 缺少 1 个必需的位置参数:'ctx'

TypeError. on_message() missing 1 required positional argument: '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'

但是我已经在 de function 中做了 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)```

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

async def on_message(message):

But i have did ctx in de function so i dont know whats wrong with the code I hope you guys can help me :D

你有一个额外的参数 ctx,它不应该存在。结果,Discord 将调用此事件并且永远不会在其中传递 ctx,因此调用的函数将缺少 1 个参数,从而引发该错误。该错误确实 not 意味着您没有将它添加到函数签名中,但是它没有通过调用它的任何东西 进入 函数.

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 个输入参数,而不是两个。因此抛出这个错误。


删除 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)