#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}