Discord.py ctx'in varsayılan bağımsız değişken olarak nasıl iletileceği

Aug 15 2020

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

1 fixmycode Aug 15 2020 at 16:39

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):

ctxbelirli 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, memberbir Kullanıcı olacağı zaman özel bir kanal haricinde her zaman Üye olduğunu varsayabilirsiniz .

2 Videro Aug 15 2020 at 16:37

bunu kullanabilirsin -

user = ctx.author if not user else user

onun yerine -

if(user == None):
                user = ctx.message.author