이번에는 Embed(임베드)를 사용하여 디스코드 봇이 보내는 메시지를 더욱 깔끔하게 보이도록 작업해봅시다.



Embed는 위와 같이 여러 디스코드 봇에 사용되고 있습니다. 오늘은 위 Embed를 사용하여 깔끔하게 메시지를 보내봅시다.
Embed 사용해보자!
일단 저희는 아래 사진과 같은 내용을 만들어 볼 것입니다.

일단 Embed라는 것을 선언해줍시다.
embed=discord.Embed(title="Embed", description="Embed 내용.", color=0x00aaaa)
위와 같이 하면 embed라는 변수 안에 위 값이 들어가게 됩니다. title 이란 곳에는 Embed라는 단어가 들어가며, description 에는 Embed 내용.이라는 값이 아래에 작성되기 됩니다. 그리고 오른쪽 color를 통하여 옆줄 색깔을 선정하실 수 있습니다. 색깔은 16진수로 만드시면 됩니다.
embed.set_author(name="작성자의 이름",icon_url=message.author.avatar_url)
위와 같이 해주면, author 값이 설정됩니다. 이것은 이 윗 값을 설정해주는 것입니다.
name에 작성자 이름이라는 내용이 들어갔으며 icon_url에는 사진 URL값을 넣어주면 됩니다. 저는 제 프로필 사진을 넣기 위해 message.author.avatar_url를 사용하였습니다.
또한, url 값으로 "작성자의 이름"이라는 곳에 하이퍼링크를 걸어주실 수 있습니다.
embed.set_footer(text="이것은 footer의 값입니다.")
아래의 "이것은 footer의 값입니다."는 위 내용으로 삽입할 수 있습니다. text값에 위 내용을 선언해 줄 수 있고, icon_url 값을 추가적으로 적어주셔서 사진 URL값을 넣어주시면 아래쪽 "이것은 footer의 값입니다." 왼쪽에 이미지가 추가됩니다.
embed.add_field(name="이것은 field입니다.", value="이것은 field 값입니다.", inline=False)
이것을 통하여, field 값을 설정해주실 수 있으며 field는 여러 개를 해주실 수 있습니다.

대신 field를 사용하면, 20개까지 되는 것으로 알고 있습니다. 혹시 틀렸으면, 댓글 부탁드립니다.
inline 값을 True로 하면 옆으로 써집니다. field value값에는 [내용](링크)를 통하여, 하이퍼 링크를 만들 수 있습니다. [Jump to link](http://discordapp.com) 이렇게 뛰어넘길수 있습니다.
(추가) field 값내에서는 마크다운문법이 먹힌다는 거었네요. [내용](링크)는 마크다운이였습니다.

또한 출력을 해주기 위해 마지막으로 코드를 추가해줍니다.
await message.channel.send(embed=embed)
이러면 embed를 출력하실수 있습니다.
지금까지 해본 코드를 종합하면 이렇게 됩니다.
embed=discord.Embed(title="Embed", description="Embed 내용.", color=0x00aaaa) embed.set_author(name="작성자의 이름",icon_url=message.author.avatar_url) embed.add_field(name="이것은 field1입니다.", value="이것은 field1 값입니다.", inline=False) embed.add_field(name="이것은 field2입니다.", value="이것은 field2 값입니다.", inline=False) embed.add_field(name="이것은 field3입니다.", value="이것은 field3 값입니다.", inline=False) embed.add_field(name="이것은 field4입니다.", value="이것은 field4 값입니다.", inline=False) embed.set_footer(text="이것은 footer의 값입니다.") await message.channel.send(embed=embed)
Embed/타임스탬프를 사용해보자
이제 import datetime을 맨 위에 추가하시고 embed값을 위와 같이 수정해보세요!
embed=discord.Embed(title="Embed", description="Embed 내용.",timestamp=datetime.datetime.now() , color=0x00aaaa)
위와 같이 하시면 footer 값 오른쪽에 timestamp가 추가됩니다.

어...?
이 메시지가 전송된 시간은 오후 9시 42분인데, 왜 내일 오전 6시 42분이라고 나올까요? 그것은 바로 시차 때문입니다. 대한민국은 UTC+9이기 때문에 9시간 더 빠르게 나오는 겁니다. timestamp를 해줄 경우 UTC+0으로 맞춰줘야 합니다.
따라서, 이 작업을 또 해줘야 할 것입니다. 일단 Win + R를 열고 cmd를 치고 열어줍니다.
py -3 -m pip install pytz
해당 내용을 입력하여 pytz를 받아줍니다.
pytz를 다 받으셨다면 다시 코드로 돌아오시고, import pytz를 추가해줍니다.
embed=discord.Embed(title="Embed", description="Embed 내용.",timestamp=datetime.datetime.now(pytz.timezone('UTC')), color=0x00aaaa)
다시 위와 같이 고쳐주시면 정상 시간대로 나옵니다.

오 잘 나옵니다. UTC+0으로 맞추어 주시면 위와 같이 정상적으로 표시됩니다.
이것또한 지금까지 코드를 해보면 이렇게 됩니다.
#맨위에 추가. import pytz #if 문내에 embed=discord.Embed(title="Embed", description="Embed 내용.",timestamp=datetime.datetime.now((pytz.timezone('UTC')), color=0x00aaaa)embed.set_author(name="작성자의 이름",icon_url=message.author.avatar_url) embed.add_field(name="이것은 field1입니다.", value="이것은 field1 값입니다.", inline=False) embed.add_field(name="이것은 field2입니다.", value="이것은 field2 값입니다.", inline=False) embed.add_field(name="이것은 field3입니다.", value="이것은 field3 값입니다.", inline=False) embed.add_field(name="이것은 field4입니다.", value="이것은 field4 값입니다.", inline=False) embed.set_footer(text="이것은 footer의 값입니다.") await message.channel.send(embed=embed)
Embed에 사진을 올려보자!
이제 Embed에 사진을 올려보겠습니다. 물론 Embed에 영상도 지원하는것으로 알려졌지만, discord.py는 지원하지 않습니다 아무리 봐도 읽을수 밖에 없습니다. 저는 https://unsplash.com/photos/vtGuAHKE7Tg 에 대한 사진을 올리려고 합니다.
embed.set_image(url="https://images.unsplash.com/photo-1585255318860-a65b32b03585?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60")
위 코드를 추가하면 아래의 사진처럼 나오게 됩니다.

embed.set_image에는 url="링크"를 넣어주셔야 하며, http(s)만 지원한다고 합니다. 이제 저 사진을 아래의 코드처럼 고쳐보겠습니다.
embed.set_thumbnail(url="https://images.unsplash.com/photo-1585255318860-a65b32b03585?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60")
위와 같이 코드를 수정하면 아래의 사진처럼 나옵니다.

embed.set_thumbnail에도 위 set_image처럼 url="링크"를 넣어주어야 하며, 이것 또한 똑같이 http(s)만 지원합니다.
이상으로 3편을 마치며, 이곳을 이용하여, 저것을 간단하게 만들어 보실 수 있습니다. 이상 강의를 마치며 다음에는 wait_for()과 이벤트를 사용한 서로 상호작용해보는 것에 대해 알려드리겠습니다.
'미사용 > (舊)디스코드봇 강좌' 카테고리의 다른 글
디스코드봇(파이썬) 06 | discord.py의 이벤트함수를 알아보고 서로 상호작용을 해보자. (27) | 2020.04.18 |
---|---|
디스코드봇(파이썬) 05 | 메세지의 특정부분만 읽어보자. (0) | 2020.04.11 |
디스코드봇(파이썬) 04 | 디스코드봇으로 파일,TTS를 사용하거나 올리자. (4) | 2020.04.04 |
디스코드봇(파이썬) 02 | 기본적인 내용을 주고 받자. (110) | 2020.03.28 |
디스코드봇(파이썬) 01 | 파이썬 모듈 다운로드와 기본 준비 (425) | 2020.03.13 |