Discord.py comment passer ctx comme argument par défaut
J'écris une commande de profil en utilisant Discord.py qui imprime des informations sur l'utilisateur spécifié.
Je voudrais passer l'auteur du message comme argument par défaut, donc si l'utilisateur écrit simplement la commande et rien d'autre, le bot enverra son profil.
@bot.command()
async def profile(ctx, *, user: discord.Member = ctx.message.author):
Le code ci-dessus ne fonctionne pas. Il se trompe avec l'erreur suivante:
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
Quelqu'un peut-il me dire ce que je fais de mal et comment faire fonctionner mon code?
ÉDITER:
J'ai en quelque sorte contourné le problème avec:
@bot.command()
async def profile(ctx, *, user: discord.Member=None):
if(user == None):
user = ctx.message.author
Ma question demeure, y a-t-il un moyen de passer ctx comme argument par défaut?
Réponses
La réponse courte est que vous ne pouvez pas faire cela, car vous modifieriez la signature de la fonction. Les commandes sont appelées en attendant cette signature:
async def my_command(ctx, *args, **kwargs):
ctx
n'est pas une valeur donnée, juste le nom du premier paramètre. Vous ne pouvez pas faire d'hypothèses sur ce qui va être utilisé.
Ce que vous pouvez faire, c'est supposer le nombre de paramètres, en suivant l'exemple qui se trouve dans la documentation discord.py, vous pouvez faire quelque chose comme ceci:
async def profile(ctx, *, user:discord.Member):
member = user or ctx.message.author
Dans ce code, vous pouvez supposer qu'il member
est toujours un membre, sauf dans un canal privé, alors qu'il s'agirait d'un utilisateur.
vous pouvez utiliser ceci -
user = ctx.author if not user else user
au lieu de -
if(user == None):
user = ctx.message.author