Discord.py как передать ctx в качестве аргумента по умолчанию
Я пишу команду профиля с помощью Discord.py, которая распечатывает информацию об указанном пользователе.
Я хотел бы передать автора сообщения в качестве аргумента по умолчанию, поэтому, если пользователь просто напишет команду и ничего больше, бот отправит их профиль.
@bot.command()
async def profile(ctx, *, user: discord.Member = ctx.message.author):
Приведенный выше код не работает. Он выдает следующую ошибку:
Traceback (most recent call last):
File "bot.py", line 50, in <module>
async def profile(ctx, *, user: discord.Member = ctx.message.author.name):
NameError: name 'ctx' is not defined
Может ли кто-нибудь сказать мне, что я делаю не так и как заставить мой код работать?
РЕДАКТИРОВАТЬ:
Я как бы обошел проблему с:
@bot.command()
async def profile(ctx, *, user: discord.Member=None):
if(user == None):
user = ctx.message.author
Мой вопрос все еще остается, есть ли способ передать ctx в качестве аргумента по умолчанию?
Ответы
Короткий ответ: вы не можете этого сделать, так как вы измените подпись функции. Команды вызываются с ожиданием этой подписи:
async def my_command(ctx, *args, **kwargs):
ctx
не является заданным значением, а просто именем первого параметра. Вы не можете делать предположений о том, что будет использоваться.
Что вы можете сделать, это предположить количество параметров, следуя примеру из документации discord.py, вы можете сделать что-то вроде этого:
async def profile(ctx, *, user:discord.Member):
member = user or ctx.message.author
В этом коде вы можете предположить, member
что всегда является участником, за исключением частного канала, когда это будет пользователь.
вы можете использовать это -
user = ctx.author if not user else user
вместо -
if(user == None):
user = ctx.message.author