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