명령에 버튼을 추가하는 방법 [interactions.py]

9484 단어 discordpython
지난번에 우리는 interaction.py로 간단한 슬래시 명령을 만들었습니다. 그러나 Discord를 돌아다니며 다른 봇을 사용하면 버튼을 사용하여 봇과 상호 작용할 수 있는 몇 가지 명령이 있음을 알 수 있습니다. 이것은 매우 멋진 방법이며 동일한 작업을 원할 수 있으므로 interaction.py로 수행할 수 있는 방법을 살펴보겠습니다.

고지 사항: 이 게시물에 대한 새 샘플 파일을 생성하지만 원하는 경우 기본 파일에 추가할 수 있습니다.

메인 라이브러리를 이미 가져왔다고 가정하고 클라이언트를 선언하고 이전 게시물에서 봇을 시작하면 만들기 버튼으로 바로 이동합니다.

단추



먼저 버튼에 대한 전역 변수를 생성해 보겠습니다.

button = interactions.Button(
    style=interactions.ButtonStyle.PRIMARY,
    label="Click me!",
    custom_id="click_me",
)


  • interactions.Button : 이 객체는 Discord API로 보낼 버튼을 형성합니다.
  • style : 버튼의 스타일입니다. 현재 Discord는 사용할 수 있는 다양한 스타일을 지원합니다. 아래 이미지에서 확인할 수 있습니다.

  • label : 버튼의 레이블입니다. 버튼에 표시되는 텍스트입니다.
  • custom_id : 누군가가 버튼을 클릭했을 때 받게 될 맞춤 ID입니다. 컴포넌트 콜백이 원하는 작업을 수행하려면 이것이 필요합니다.

  • 이제 버튼이 있습니다. 다음은 무엇입니까? 물론 보내십시오.

    @client.command(
        name="button",
        description="Send a button",
    )
    async def _button(ctx: interactions.CommandContext):
        await ctx.send(components=button)
    


  • components=button : components는 메시지의 구성 요소를 구성하는 데 사용됩니다.

  • 봇을 실행하고 명령을 사용하십시오. 이와 같은 내용이 표시되면 축하합니다. interaction.py로 버튼을 만들었지만 잠시만 기다려 주세요. 버튼을 클릭해도 아무 일도 일어나지 않고 "이 상호작용에 실패했습니다."라는 메시지가 표시됩니다.


    그 이유는 아직 버튼 콜백을 추가하지 않았기 때문입니다. 버튼을 클릭하면 INTERACTIONS_CREATE 디스패치 게이트웨이 이벤트가 생성되며 해당 이벤트를 처리하려면 버튼 콜백이 필요합니다.

    @client.component("click_me")
    async def _click_me(ctx: interactions.ComponentContext):
        await ctx.send("Clicked!")
    


  • @client.component() : 특별히 구성 요소 이벤트를 처리하는 데코레이터입니다. click_me는 위에서 만든 custom_id입니다. 이것이 할 일은 INTERACTIONS_CREATE 디스패치 게이트웨이 이벤트를 듣고 우리가 만든 custom_id와 일치하는지 확인하는 것입니다.

  • 이제 버튼, 명령 및 콜백 이벤트가 있으므로 봇을 다시 실행하고 테스트해 보겠습니다. 이와 같은 것이 있다면 축하합니다. interaction.py와 상호 작용할 수 있는 버튼으로 작동하는 명령을 만들면 됩니다.

    작업 행



    작업 행은 구성 요소를 행으로 구성하는 방법입니다. Discord에 따르면 메시지당 최대 5개의 작업 행을 가질 수 있으며 각 작업 행은 다른 작업 행을 포함할 수 없습니다.

    Action Rows를 살펴보았으니 이제 interaction.py를 사용해 보겠습니다.

    button =[
        interactions.ActionRow(
            components=[
                interactions.Button(
                    style=interactions.ButtonStyle.PRIMARY,
                    label="Click me!",
                    custom_id="click_me",
                ),
                interactions.Button(
                    style=interactions.ButtonStyle.DANGER,
                    label="Do not click!",
                    custom_id="do_not_click",
                ),
            ]
        )
    ]
    
    @client.command(
        name="button",
        description="Send a button",
    )
    async def _button(ctx: interactions.CommandContext):
        await ctx.send(components=button)
    
    @client.component("click_me")
    async def click_me(ctx: interactions.ComponentContext):
        await ctx.send("Clicked!")
    
    @client.component("do_not_click")
    async def do_not_click(ctx: interactions.ComponentContext):
        await ctx.send("You clicked the wrong button!")
    


  • interactions.ActionRow() : 이 개체는 작업 행을 만들어 Discord로 보내는 역할을 합니다.
  • components : Discord API로 보낼 Button의 목록입니다.

  • 위의 코드를 봇 파일에 복사한 후 봇을 실행하고 명령을 실행합니다. 이와 같은 내용이 표시된다면 축하합니다.


    interaction.py 및 라이브러리를 활용하는 방법에 대한 향후 게시물을 계속 지켜봐 주시기 바랍니다. 이 게시물이 마음에 드셨다면 하트를 꼭 눌러주세요. 질문이 있으시면 의견 섹션에 알려주십시오. 또는 공식interactions.py Discord server에 가입하여 추가 도움을 받을 수 있습니다.

    좋은 웹페이지 즐겨찾기