본문 바로가기

개발일지/디스코드 봇

디스코드 봇 개발 일지 2024-03-03 - 구글 클라우드로 24시간 봇 돌리기 & 주사위 기능 리팩토링 & 이모티콘 사용

 

 

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

 

※ 직접 하면서 알게된 것을 모두 써서 사족이 많음

 

※ 리빙 포인트) 리팩토링을 하니까 여기에 코드를 직접 올리기가 어렵다.

 

 

 

친구가 구글 클라우드로 마인크래프트 서버를 돌릴 수가 있다더라

 

조금 전에 디스코드 봇을 24시간 돌릴 수 있는 서버 호스팅 사이트(가급적 무료)를 찾아나섰는데

 

친구가 구글 클라우드로 마인크래프트 서버를 무료로 돌릴 수가 있다더라고 했다.

 

무료는 항상 옳기 때문에 바로 실행에 옮기기 시작했다.

 

 

검색을 해보니 가장 눈에 띄는 사이트는

 

https://namu.wiki/w/Discord/%EB%B4%87/%ED%98%B8%EC%8A%A4%ED%8C%85

 

Discord/봇/호스팅

이 문서는 Discord 봇을 서버로 호스팅하는 방법에 대하여 서술한다. Google Cloud Platform

namu.wiki

 

킹-무 갓-키

 

더럽고 추하게 나무위키를 보고 테스트 겸으로 그대로 다 따라했는데

 

너무나도 완벽하게 잘 돌아간다.

 

나무위키랑 링크로 들어가는 블로그에 설명이 너무 잘 되었어서

 

굳이 여기에 중복되는 내용을 적지는 않으려고 한다.

 

그리고 새벽 3시(햄버거 먹을 시간)가 넘어서 빨리 글을 남기고 자고 싶어서이기도 하다.

 

조금만 추가할 내용만 적당히 적고 넘어가려고 한다.

 

 

 

봇 파일을 깃허브 말고 바로 업로드하는 방법도 된다.

 

깃허브를 통하는 방법은 실수로 public에서 디스코드 토큰을 노출시키는 위험도 있고

 

gitignore로 혹시나 필요한 파일을 포함하지 않고 github에 올린 경우가 있을 수 있다.

 

개인적으로 한다면 상관없지만, 나는 현재 공개를 염두에 두고 있다보니

 

깃허브 말고 바로 업로드하는 방식으로 하였다.

 

 

파일 업로드

 

인스턴스 콘솔을 브라우저에서 열면 상단에 파일을 업로드할 수 있다.

 

디스코드 봇 파일(폴더)를 압축해서(원하는 형식으로) 업로드를 한 후에...

 

아마도 대부분 windows에 익숙해서 zip 파일로 압축해서 옮겼을 것 같은데,

 

물론 컴퓨터에 windows를 깔고 가상으로 ubuntu를 쓰거나 wsl을 쓰는 나도 마찬가지라

 

zip 파일로 파일을 업로드해서 압축 해제를 못?할 것이다. (tar 로 되는지 확인 안 해봄)

 

 

이를 해결하기 위해서는 unzip을 이용해주면 된다.

 

sudo apt-get install unzip

 

 

인스턴스 콘솔에 이것을 입력해주고 unzip이 깔리면

 

unzip XXX.zip

 

 

이 명령어로 해제가 가능하다.

 

따로 폴더를 만들지 않고 바로 흩뿌려질텐데

 

어차피 디스코드 봇 용으로만 쓰려고 한거니까 상관없다.

 

그렇게 하고 나서 나무위키에 나온대로 봇을 실행해주면 된다.

 

 

 

주사위 기능

 

알다시피 기존에 만든 봇은 한 파일에 모든 기능을 다 때려부은

 

정말 naive한 상태의 야생 코드라고 볼 수 있다.

 

회사 인턴을 하면서 좀 깨달은 것으로 리팩토링을 했는데...

 

간단하게 말하자면 UI, util, 로직 코드를 각 파일로 구분하고 dependency를 적당히 했다보니

 

여기에 다 올리기에는 매우 귀찮은 형태가 되었다.

 

 

물론 개발하기에는 매우 좋은 형태이지만 말이다.

 

class diagram 또는 module view 라도 올릴까 생각했는데

 

빨리 글 남기고 자야지가 30분이 넘어서 거의 4시를 바라보고 있다.

 

결과 형태를 캡쳐로 남기고 자야겠다.

 

 

졸려...

 

간단하게 구조를 잡는 형태로 기본 기능만 넣었고,

 

다른 기능 리팩토링 이후에 좀 더 꾸미거나 추가할 것이 있으면 추가해보려고 한다.

 

 

 

 

이모티콘 사용

 

별 내용 아니라서 이것까지만 넣어야겠다.

 

아래는 주사위 UI 코드의 일부다.

 

def diceEmbedFactory(contents):
    embed = discord.Embed(title=":game_die: 주사위 결과", description=contents, color=color.DEFAULT_VALID_COLOR)
    return embed

 

중간의 :game_die: 가 주사위 이모티콘이다.

 

이렇게 string에 해당 이모티콘의 string 값을 넣어주면

 

디스코드에서 자동으로 변환된 형태로 들어간다.

 

 

 

 

여담

 

아 개강 싫어

 

졸립다 자야지

728x90