Discord.py bagaimana melewatkan ctx sebagai argumen baku
Saya menulis perintah profil menggunakan Discord.py yang mencetak informasi tentang pengguna tertentu.
Saya ingin meneruskan pembuat pesan sebagai argumen default, jadi jika pengguna hanya menulis perintah dan tidak ada yang lain, bot akan mengirim profil mereka.
@bot.command()
async def profile(ctx, *, user: discord.Member = ctx.message.author):
Kode di atas tidak berfungsi. Itu kesalahan dengan kesalahan berikut:
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
Adakah yang bisa memberi tahu saya apa yang saya lakukan salah dan bagaimana membuat kode saya berfungsi?
EDIT:
Saya semacam melewati masalah dengan:
@bot.command()
async def profile(ctx, *, user: discord.Member=None):
if(user == None):
user = ctx.message.author
Pertanyaan saya masih tersisa, apakah ada cara untuk meneruskan ctx sebagai argumen default?
Jawaban
Jawaban singkatnya adalah Anda tidak dapat melakukan itu, karena Anda akan mengubah tanda tangan dari fungsi tersebut. Perintah disebut mengharapkan tanda tangan ini:
async def my_command(ctx, *args, **kwargs):
ctx
bukan nilai yang diberikan, hanya nama parameter pertama. Anda tidak bisa berasumsi tentang apa yang akan digunakan.
Yang dapat Anda lakukan adalah mengasumsikan jumlah parameter, mengikuti contoh yang ada di dokumentasi discord.py, Anda dapat melakukan sesuatu seperti ini:
async def profile(ctx, *, user:discord.Member):
member = user or ctx.message.author
Dalam kode ini, Anda dapat menganggap member
selalu sebagai Anggota, kecuali di saluran pribadi, ketika itu akan menjadi Pengguna.
Anda dapat menggunakan ini -
user = ctx.author if not user else user
dari pada -
if(user == None):
user = ctx.message.author