5.파이썬을 이용한 디스코드 봇 만들기: Embed 메세지 전송

2 분 소요

디스코드 봇의 Embed 메세지 전송법

안녕하세요! 이번 글에서는 디스코드 봇의 Embed 메세지에 대해 알아보겠습니다.

1. Embed 메세지?

저번 글에서 디스코드 봇을 통한 문자열 전송은 쉽게 해볼 수 있었습니다. 하지만 생각보다 문자열 메세지는 너무 밋밋한 느낌이 들지 않나요?

d1

디스코드를 사용하시면서 다른사람이 만든 봇을 사용할 때, 사진과 같은 꾸며진 메세지를 보신적이 없으신가요? 디스코드에서는 Embed 메세지를 지원합니다. 따라서 개발자는 자신의 입맛에 따라 메세지의 디자인(?)을 설정해주는 것이 가능하죠. 지금부터 하나하나 알아보겠습니다.

2. Embed 메세지 만들기

Embed 메세지는 discord.Embed 클래스로 구성되어있습니다.

@bot.command()
async def embed(ctx):
    embed = discord.Embed(title='제목', description='내용')

    ctx.send(embed=embed)
  • 실행 결과

d2

이처럼 간단히 Embed 메세지 전송이 가능합니다. discord.Embed 클래스에서는 여러가지 종류의 속성을 가질 수 있습니다. 자세한 건 discord.py Docs에서 확인하실 수 있습니다.

3. Embed 메세지 꾸미기

앞서 말한 discord.Embed 클래스의 여러 속성 값을 선언하여 저희가 저번에 만들었던 리그 오브 레전드 실시간 매치 메세지를 꾸며보도록 하겠습니다.

1. discord.Embed.add_field

@bot.command()
async def 게임(ctx, *args):

        ...생략...

    embed = discord.Embed(title="실시간 매치 정보")
    out = ""
    for i, data in zip(range(1, 11), participants):
        out += "{} | {}\n".format(data["championId"], data["summonerName"])
        if i == 5:
            embed.add_field(name="블루 팀", value=out)
            out = ""
        elif i == 10:
            embed.add_field(name="레드 팀", value=out)

    await ctx.send(embed=embed)
  • 실행 결과

d3

Embed메세지의 field 속성을 통해 한 메세지에서의 내용을 여러 구역으로 나누어 표현이 가능합니다. 이때 field는 name, value, inline 매개변수를 받습니다.

@bot.command()
async def 게임(ctx, *args):

        ...생략...

    embed = discord.Embed(title="실시간 매치 정보",
                          colour=discord.Colour.purple())
    embed.set_author(name="리그 오브 레전드")
    embed.set_footer(text="from Riot API")
    embed.set_thumbnail(url="http://ddragon.leagueoflegends.com/cdn/6.8.1/img/map/map11.png")
    out = ""
    for i, data in zip(range(1, 11), participants):
        out += "{} | {}\n".format(data["championId"], data["summonerName"])
        if i == 5:
            embed.add_field(name=":blue_square: 블루 팀", value=out)
            out = ""
        elif i == 10:
            embed.add_field(name=":red_square: 레드 팀", value=out)

    await ctx.send(embed=embed)
  • 실행 결과

d4

  1. colour

    discord.Colour 클래스를 이용하여 Embed 메세지 왼쪽 라인의 색상을 설정할 수 있습니다. 컬러는 discord.Embed 클래스의 인스턴스를 생성하면서 매개변수로 설정이 가능합니다. 이때의 가능한 색상들은 Docs를 찾아보시기 바랍니다.

  2. author

    Embed 메세지의 최상단에 위치하는 내용입니다. 속성 title과 별개로 설정이 가능한 속성이며 discord.Embed.add_author 함수를 통해 설정이 가능합니다.

  3. footer

    author와 반대로 메세지 최하단에 위치합니다. 마찬가지로 discord.Embed.add_footer 함수를 통해 설정이 가능합니다.

  4. thumbnail

    Embed 메세지의 썸네일을 설정합니다. discord.Embed.set_thumbnail 함수를 통해 설정이 가능하며 오직 url 이미지를 매개변수로 받습니다. 썸네일을 설정한 후에 discord.Embed.thumbnail 속성인 width, height 값을 마음대로 변경할 수 있습니다.

  5. 이모티콘

    디스코드에서 제공하는 이모티콘 그대로 사용이 가능합니다. 이때, 이모티콘을 포함할 수 있는 부분은 discord.Embed.field 또는 discord.Embed.description 입니다.

부록

  • 디스코드 봇의 send 함수

discord.ext.commands.Context.send를 통해 봇으로 다양한 메세지를 보낼 수 있습니다.

await send(content=None, *, tts=False, embed=None, file=None, files=None, delete_after=None, nonce=None, allowed_mentions=None, reference=None, mention_author=None)

이때 저희가 사용했던 content, embed 뿐만 아니라 디스코드의 tts 기능을 사용할 수도 있고 파일을 전송하거나, delete_after 속성을 통해 몇초 후에 메세지가 자동으로 삭제되도록 설정도 가능합니다.

디스코드 Docs에서 자세히 확인하실 수 있습니다.

댓글남기기