본문 바로가기

개발일지/디스코드 봇

디스코드 봇 개발 일지 2023-01-26 - Embed

 

 

※ 작성자가 작성한 내용이 일부 틀릴 수도 있음 주의

 

※ 작성자가 코드 쓰다가 계속 코드 수정함 주의

 

 

그동안 약간씩의 수정은 있었으나...

 

 

디코 봇 마지막 글 이후 2주의 시간이 지났는데...

 

특별히 글로 쓸만한 새로운 개념은 없었다.

 

그런데 쓰다보니 하도 명령어 채널을 글로 뒤덮기도 하고

 

Queue 를 출력하는 데에 10번의 출력을 반복하는 것 자체도 비효율적일 뿐더러 (대충 짜놓고 방치했었음)

 

채널이 좀 지저분해지는 것이 있었다.

 

 

그래서 좀 찾아보니, 메시지를 send 하는 데에 있어,

 

"Embed" 라는 데이터 클래스가 있었고 많이 귀찮기는 한데 예쁘게 출력하기는 좋아서 사용했다.

 

 

 

 

Discord.Embed

 

 

아래는 대충 기본형태 및 주요 변수들을 나열한 것들이다.

 

class discord.Embed(*, colour=None, color=None, title=None, type='rich', url=None, description=None, timestamp=None)

Attributes 		# ( 주요하다고 생각되는 매개값들만 추렸음. 빠졌는데 좋은 게 있을 수도? )

title 			# 제목 정도로 생각하면 된다. Embed 형태로 출력할 때 맨 위에 출력되는 문자열이다.
description 		# 설명이긴 한데, 사실상 주요 내용으로 쓰는 경우도 많을 것이라 생각됨.
url 			# URL을 같이 넣어주고 싶다면 넣어주자.
timestamp 		# 날짜나 시각을 넣어주고 싶으면 넣어주자.
colour / color 		# 출력하는 걸 보면, 가장 왼쪽 부분에 기다란 세로 줄이 있는데, 그거 색 바꾸는 거다.
image 			# 이미지의 URL, 너비, 높이를 지정해서 추가할 수 있다.
thumbnail 		# image랑 똑같이 URL, 너비, 높이를 지정할 수는 있는데, 썸네일 용이란 차이점이 있다.
video 			# image나 thumbnail 과 똑같이 지정은 되는데, 영상이다.
author, provider 	# 잘 쓰면 쓸모가 많을 것 같긴 한데, 써본 적이 없어서 뭐라할지 모르겠다.

 

대략 이러한 매개값들이 있고 (이외에도 더 있고), 함수도 많기는 하지만

 

일단은 Embed를 이용한 출력만 하고 싶어서 이 정도까지만 알아보도록 하자.

 

 

title

 

가장 중요한 매개값1

 

말 그대로 Embed 의 제목이다. 진하고 약간 큰 텍스트로 나온다.

 

embed = discord.Embed(title="텍스트")

 

혹시나 모를 수 있는 사람들을 위해,

 

위와 같은 식으로 discord.Embed의 괄호 안에 title = "뭐시기" 형태로 넣어주면 된다.

 

title 뿐만 아니라 매개값들을 다 "," 로 구분해주면서 쭉 넣어주면 된다.

 

맨 윗줄이 title

 

어쨌든 맨 위의 "Play List Queue" 와 같은 형태로 보이게 된다.

 

 

 

 

description

 

가장 중요한 매개값2

 

말 그대로 설명이다. title에 비해 작고 옅은 텍스트로 출력된다.

 

최대 4096바이트였나 그만큼의 string을 넣을 수 있다.

 

 

그림은 재탕을 그냥 하지 않았다. 위 그림의 첫 줄 title을 제외한 나머지가 description이다.

 

 

 

 

Colour / Color

 

매우 개인적으로 중요하다고 생각하는 매개값

 

Colour 또는 Color 로 쓴다. 알다시피 왼쪽은 영국식, 오른쪽은 미국식이다.

 

가장 왼쪽의 세로줄 색깔을 바꾸어준다.

 

위 그림의 경우, 0xFF5733 을 넣어준 것이다. (다른 글에서 찾은 것과 똑같은 값을 넣어준 것이긴 하다.)

 

 

 

해당 코드 부분 및 결과물 + 여담

 

@bot.command()
async def queue(message,*vars):
    global playNumber
    global messageChannel
    queueIdx = playNumber - 1
    if len(vars) > 0 and vars[0].isdecimal():
        queueIdx = int(vars[0])
    if message.channel == messageChannel:
        plist = []
        for i in range(max(0,queueIdx-5),min(len(playList),queueIdx+5)):
            if i == playNumber - 1:
                plist.append("현재 진행 곡 ↓")
            plist.append(f"{i} : {playList[i]['title']} / {playList[i]['duration']//60}분 {playList[i]['duration']%60}초")
        embed = discord.Embed(title="Play List Queue", description="\n".join(plist), color=0xFF5733)
        await message.channel.send(embed=embed)

 

현재 플레이 하는 곡을 포함해서으로 앞으로 최대 5곡, 뒤로 최대 4곡까지 보여주는 코드다.

 

결과는 아래와 같다.

 

내가 play한 것도 있지만, 친구들이 한 것도 있다.

 

뭔가 Social Credits가 올라갈듯한 느낌도 드는게 있고

 

버튜버를 너무 좋아하는 것 같아보이는 사람도 있지만

 

일단 자유롭게 틀고 싶은거 틀게 만든 걸 가지고 캡쳐해서 글을 쓰려고 한 것이다보니

 

양해바란다.

 

* 혹시나 하니 본인은 Meme 을 좋아하는 사람이라는 것을 밝힙니다.

728x90