Python

Как передать несколько аргументов в on_message()?

Пишу код:
 @bot.event 
async def on_message(ctx, message):
u_r = await bot.wait_for('message', check=lambda message: message.author == ctx.author) # Проверка сообщения
msg_channel = u_r.content
print(msg_channel)
Запускаю:
TypeError: on_message() missing 1 required keyword-only argument: 'message'
Никак.
on_message - заранее заготовленная функция, которую ты переопределяешь (библиотека в декораторе берет твою функцию и заменяет ей изначальную on_message). Она всегда принимает ТОЛЬКО сообщение
BT
Bakhtiyor Tajikistan
34 940
Лучший ответ
Причем тут "несколько"?
Каждая функция ждет определенное количество обьявленных аргументов.Кроме тех что ставятся по дефолту.
У тебя одного не хватает.Смотри описание функции и решай
Алексей Волков Не понял, я передал ctx,message и он пишет: Не передан аргумент message
Толик Сидоров Он пишет, что одного аргумента не хватает.
вообще Для передачи нескольких аргументов в функцию `on_message()` в библиотеке [discord.py](http://discord.py/) можно воспользоваться методом `partial()` из модуля `functools`.

Пример:

```
from functools import partial

@client.event
async def on_message(message, arg1, arg2):
# ваш код

client.on_message = partial(client.on_message, arg1="значение1", arg2="значение2")

```

В этом примере мы используем метод `partial()` для передачи аргументов `arg1` и `arg2` в функцию `on_message()`. Обратите внимание, что мы вызываем `client.on_message` вместо `on_message` напрямую, и передаем значения `arg1` и `arg2` в качестве аргументов.

Теперь при каждом вызове функции `on_message()`, ей будут передаваться значения `arg1` и `arg2`.





что касается вашего кода . ошибку можно исправить так


В данном коде происходит ошибка `TypeError: on_message() missing 1 required keyword-only argument: 'message'`, которая возникает из-за того, что функция `on_message` должна принимать два аргумента `ctx` и `message`.

Чтобы исправить ошибку, необходимо изменить аргументы функции `on_message` следующим образом:

```
@bot.event
async def on_message(message, ctx):
u_r = await bot.wait_for('message', check=lambda message: message.author == ctx.author ) # Проверка сообщения
msg_channel = u_r.content
print(msg_channel)

```

Таким образом, теперь функция `on_message` будет корректно принимать два аргумента `message` и `ctx`, и ошибка `TypeError: on_message() missing 1 required keyword-only argument: 'message'` не должна возникать.
Алексей Волков Ошибка и правда пропала! Но вылезла новая:
TypeError: on_message() missing 1 required positional argument: 'ctx'