Discord.py ctx'in varsayılan bağımsız değişken olarak nasıl iletileceği
Discord.py kullanarak, belirtilen kullanıcıyla ilgili bilgileri yazdıran bir profil komutu yazıyorum.
Varsayılan argüman olarak mesaj yazarını iletmek istiyorum, bu nedenle kullanıcı sadece komutu yazarsa ve başka bir şey yazmazsa, bot profilini gönderecektir.
@bot.command()
async def profile(ctx, *, user: discord.Member = ctx.message.author):
Yukarıdaki kod çalışmıyor. Aşağıdaki hatayla hata verir:
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
Kimse bana neyi yanlış yaptığımı ve kodumu nasıl çalıştıracağımı söyleyebilir mi?
DÜZENLE:
Sorunu şununla atladım:
@bot.command()
async def profile(ctx, *, user: discord.Member=None):
if(user == None):
user = ctx.message.author
Sorum hala duruyor, ctx'i varsayılan argüman olarak geçirmenin bir yolu var mı?
Yanıtlar
Kısa cevap, işlevin imzasını değiştireceğiniz için bunu yapamayacağınızdır. Bu imzayı bekleyen komutlar denir:
async def my_command(ctx, *args, **kwargs):
ctx
belirli bir değer değil, sadece ilk parametrenin adı. Ne için kullanılacağına dair varsayımlarda bulunamazsınız.
Yapabileceğiniz şey, discord.py belgesinde bulunan örneği takip ederek parametre sayısını varsaymaktır, bunun gibi bir şey yapabilirsiniz:
async def profile(ctx, *, user:discord.Member):
member = user or ctx.message.author
Bu kodda, member
bir Kullanıcı olacağı zaman özel bir kanal haricinde her zaman Üye olduğunu varsayabilirsiniz .
bunu kullanabilirsin -
user = ctx.author if not user else user
onun yerine -
if(user == None):
user = ctx.message.author