discord.py 프로젝트 4: ✍🏽파트너십 봇!

이 기사에서는 자동 파트너십 프로세스를 통해 사용자를 안내할 수 있는 Discord 봇을 만들 것입니다!

Discord 서버 파트너십이 무엇인가요?
Discord 서버 파트너십은 두 서버가 멤버를 공유하기 위해 지정된 채널에서 상대방의 초대 링크를 보내는 것입니다.

최종 제품은 this과 같습니다.

서버 직원은 다음을 볼 수 있습니다.


체크 표시를 클릭하거나 십자가를 클릭하여 요청을 수락하거나 거부할 수 있습니다!

수락되면 지정된 채널에 광고가 자동으로 게시됩니다!


discord.ext.forms 설치 🔧



Discord.ext.forms는 양식 및 설문 조사를 만드는 봇 개발자를 돕기 위해 특별히 설계된 모듈입니다! 설치하려면 셸을 열고 다음을 입력해야 합니다.

pip install discord-ext-forms

완료되면 코딩을 시작할 준비가 된 것입니다!

봇 코딩 ⚙



이를 시작하려면 commands.Bot 인스턴스를 시작해야 합니다.

from discord.ext import commands
import discord

bot = commands.Bot(command_prefix="!")

bot.run(TOKEN_HERE)

이제 봇이 생겼으니 partner 명령을 만들어 봅시다!

from discord.ext import commands
import discord

bot = commands.Bot(command_prefix="!")

@bot.command()
async def partner(ctx):
    ...

bot.run(TOKEN)

파트너십 명령을 위한 양식을 만들기 위해 discord.ext.forms에서 Form 클래스를 가져와야 합니다!

from discord.ext.forms import Form

이제 양식을 시작하겠습니다! 초대 링크, 설명 및 광고 서버를 요청하고 싶을 가능성이 높지만 이러한 질문을 추가하거나 제거할 수 있습니다!

명령에서 양식을 만들어 봅시다.

form = Form(ctx, "Partnership Request")

질문을 추가하려면 양식의 .add_question 메서드를 사용합니다.

form.add_question(
        "What's the invite link to your server?", # The question which it will ask
        "invitelink", # What the form will call the result of this question
        "invite" # The type the response should be
    )

유형이 invite이기 때문에 discord.ext.forms는 응답이 초대인지 확인하고 초대 개체를 반환합니다.

이제 다른 두 가지 질문을 추가해 보겠습니다.

@bot.command()
async def partner(ctx):
    form = Form(ctx, "Partnership Request")
    form.add_question(
        "What's the invite link to your server?", # The question which it will ask
        "invitelink", # What the form will call the result of this question
        "invite" # The type the response should be
    )
    form.add_question(
        "What's a description of your server?",
        "description"
    )
    form.add_question(
        "What's your server's advertisement?",
        "advertisement"
    )

마지막 두 개는 메시지 내용만 원하기 때문에 유형이 없습니다.

이제 양식을 시작하겠습니다!

results = await form.start()
results에는 3가지 속성이 있습니다.
  • invitelink
  • description
  • advertisement

  • 이전에 이 값을 설정한 키입니다!

    이제 스태프에게 제출물을 보여주는 임베드를 만들어 보겠습니다.

    embed = discord.Embed(
            title=f"Partnership Request from {results.invitelink.guild.name}",
            description=f"**Description:** {results.description}",
        )
        embed.set_thumbnail(url=results.invitelink.guild.icon_url)
        embed.set_author(name=ctx.author, icon_url=ctx.author.avatar_url)
    

    이제 파트너쉽 채널을 만들어 임베딩을 보낼 수 있습니다!

    partnershipreq = bot.get_channel(partnership_request_channel_id_here)
    

    마지막으로 보내자!

    prompt = await partnershipreq.send(embed=embed)
    



    직원이 수락 및 거부할 수 있으려면 discord.ext.forms: ReactConfirm 의 다른 양식이 필요합니다.

    from discord.ext.forms import Form, ReactConfirm
    

    이전에 저장한 이유prompt는 수락/거부 프로세스에 필요하기 때문입니다. 다음과 같이 ReactConfirm을 사용하여 confirm라는 새 양식을 만듭니다.

    confirm = ReactConfirm(user=ctx.author, message=prompt, bot=bot)
    accepted = await confirm.start()
    

    이제 봇은 메시지를 보낸 후 ✔ 및 ❌ 이모티콘으로 반응하고 스태프가 하나를 선택하기를 기다립니다.

    거의 다 왔습니다! 이제 광고가 수락되면 물론 포함된 광고를 파트너십 채널로 보내면 됩니다.

    if accepted:
        partners = bot.get_channel(partners_channel_id_here)
        em = discord.Embed(title=results.invitelink.guild.name, 
        description=results.advertisement, color=0x2F3136)
        em.set_author(name=ctx.author, icon_url=ctx.author.avatar_url)
        em.set_thumbnail(url=results.invitelink.guild.icon_url)
        await partners.send(embed=em)
    

    이제 끝났습니다! 최종 코드는 다음과 같습니다.

    from discord.ext import commands
    import discord
    from discord.ext.forms import Form, ReactConfirm
    
    bot = commands.Bot(command_prefix="!")
    
    @bot.command()
    async def partner(ctx):
        form = Form(ctx, "Partnership Request")
        form.add_question(
            "What's the invite link to your server?", # The question which it will ask
            "invitelink", # What the form will call the result of this question
            "invite" # The type the response should be
        )
        form.add_question(
            "What's a description of your server?",
            "description"
        )
        form.add_question(
            "What's your server's advertisement?",
            "advertisement"
        )
        results = await form.start()
        embed = discord.Embed(
            title=f"Partnership Request from {results.invitelink.guild.name}",
            description=f"**Description:** {results.description}",
        )
        embed.set_thumbnail(url=results.invitelink.guild.icon_url)
        embed.set_author(name=ctx.author, icon_url=ctx.author.avatar_url)
        partnershipreq = bot.get_channel(partnership_request_channel_id_here)
        prompt = await partnershipreq.send(embed=embed)
        confirm = ReactConfirm(user=ctx.author, message=prompt,bot=bot)
        accepted = await confirm.start()
        partners = bot.get_channel(partners_channel_id_here)
        em = discord.Embed(title=results.invitelink.guild.name, description=results.advertisement, color=0x2F3136)
        em.set_author(name=ctx.author, icon_url=ctx.author.avatar_url)
        em.set_thumbnail(url=results.invitelink.guild.icon_url)
        await partners.send(embed=em)
    
    
    bot.run(TOKEN)
    



    이 모듈의 다른 사용 사례를 보려면 여기에서 확인하십시오.


    테라바이트3 / discord-ext-forms


    discord.py를 사용하여 양식, 설문 조사 및 반응 입력을 만드는 더 간단한 방법입니다.

    좋은 웹페이지 즐겨찾기