5.파이썬을 이용한 디스코드 봇 만들기: Embed 메세지 전송
디스코드 봇의 Embed 메세지 전송법
안녕하세요! 이번 글에서는 디스코드 봇의 Embed 메세지에 대해 알아보겠습니다.
1. Embed 메세지?
저번 글에서 디스코드 봇을 통한 문자열 전송은 쉽게 해볼 수 있었습니다. 하지만 생각보다 문자열 메세지는 너무 밋밋한 느낌이 들지 않나요?
디스코드를 사용하시면서 다른사람이 만든 봇을 사용할 때, 사진과 같은 꾸며진 메세지를 보신적이 없으신가요? 디스코드에서는 Embed
메세지를 지원합니다. 따라서 개발자는 자신의 입맛에 따라 메세지의 디자인(?)을 설정해주는 것이 가능하죠. 지금부터 하나하나 알아보겠습니다.
2. Embed 메세지 만들기
Embed
메세지는 discord.Embed
클래스로 구성되어있습니다.
@bot.command()
async def embed(ctx):
embed = discord.Embed(title='제목', description='내용')
ctx.send(embed=embed)
- 실행 결과
이처럼 간단히 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)
- 실행 결과
Embed
메세지의 field 속성을 통해 한 메세지에서의 내용을 여러 구역으로 나누어 표현이 가능합니다. 이때 field는 name
, value
, inline
매개변수를 받습니다.
3. colour, author, footer, thumbnail
@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)
- 실행 결과
-
colour
discord.Colour
클래스를 이용하여Embed
메세지 왼쪽 라인의 색상을 설정할 수 있습니다. 컬러는discord.Embed
클래스의 인스턴스를 생성하면서 매개변수로 설정이 가능합니다. 이때의 가능한 색상들은Docs
를 찾아보시기 바랍니다. -
author
Embed
메세지의 최상단에 위치하는 내용입니다. 속성title
과 별개로 설정이 가능한 속성이며discord.Embed.add_author
함수를 통해 설정이 가능합니다. -
footer
author
와 반대로 메세지 최하단에 위치합니다. 마찬가지로discord.Embed.add_footer
함수를 통해 설정이 가능합니다. -
thumbnail
Embed
메세지의 썸네일을 설정합니다.discord.Embed.set_thumbnail
함수를 통해 설정이 가능하며 오직 url 이미지를 매개변수로 받습니다. 썸네일을 설정한 후에discord.Embed.thumbnail
속성인width
,height
값을 마음대로 변경할 수 있습니다. -
이모티콘
디스코드에서 제공하는 이모티콘 그대로 사용이 가능합니다. 이때, 이모티콘을 포함할 수 있는 부분은
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에서 자세히 확인하실 수 있습니다.
댓글남기기