В TypeError. on_message() отсутствует 1 требуемый позиционный аргумент: ‘ctx’

#python #discord #discord.py #discord.py-rewrite #traceback

#python #Discord #discord.py #трассировка

Вопрос:

Я пытаюсь создать бота с автоматическим ответом для чего-то вроде автоматической поддержки при каждом вводе: hey i

Бот выдает эту ошибку:

 Ignoring exception in on_message
Traceback (most recent call last):
  File "C:UserslequiAppDataLocalProgramsPythonPython38-32libsite-packagesdiscordclient.py", line 312, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'ctx'
  

Но я сделал ctx в функции de, поэтому я не знаю, что не так с кодом
Я надеюсь, что вы, ребята, сможете мне помочь: 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)```
  

Ответ №1:

on_message Единственный входной аргумент имеет 1 (см. Документацию).

Таким образом, ваш код:

 @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)
  

Комментарии:

1. Как я мог это исправить?

2. Что это? В последнем предложении я сказал, что вам нужно было сделать…

Ответ №2:

Согласно документации on_message принимает только 1 аргумент, являющийся message . Чтобы исправить это, вы должны просто удалить ctx в качестве параметра.

 async def on_message(message):
  

Но я сделал ctx в функции de, поэтому я не знаю, что не так с кодом, надеюсь, вы, ребята, сможете мне помочь: D

У вас есть дополнительный параметр ctx , которого там не должно быть. В результате Discord вызовет это событие и никогда не передаст ctx его, поэтому в вызываемой функции будет отсутствовать 1 аргумент, который выдает эту ошибку. Ошибка не означает, что вы не добавили ее в сигнатуру функции, но что она не была передана в функцию тем, кто ее вызвал.

Комментарии:

1. Как я мог это исправить?

2. Я рассказал вам, как это исправить… Мой ответ буквально гласит to fix it you should {do this}