Discord.py ctx를 기본 인수로 전달하는 방법

Aug 15 2020

지정된 사용자에 대한 정보를 인쇄하는 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를 기본 인수로 전달하는 방법이 있습니까?

답변

1 fixmycode Aug 15 2020 at 16:39

짧은 대답은 함수의 시그니처를 변경하므로 그렇게 할 수 없다는 것입니다. 다음 서명을 예상하여 명령이 호출됩니다.

async def my_command(ctx, *args, **kwargs):

ctx주어진 값이 아니라 첫 번째 매개 변수의 이름입니다. 무엇을 위해 사용 될지에 대한 가정을 할 수 없습니다.

할 수있는 것은 discord.py 문서에있는 예제에 따라 매개 변수의 수를 가정하는 것입니다. 다음과 같이 할 수 있습니다.

async def profile(ctx, *, user:discord.Member):
    member = user or ctx.message.author

이 코드에서는 사용자가 member개인 채널 인 경우를 제외하고는 항상 멤버 라고 가정 할 수 있습니다 .

2 Videro Aug 15 2020 at 16:37

당신은 이것을 사용할 수 있습니다-

user = ctx.author if not user else user

대신에 -

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