类型错误。 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)
我尝试为每次键入自动支持之类的东西制作一个自动响应机器人: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)