.net DiscordBot 제작 및 서버 탑재

DonghoShin·2022년 2월 20일
0

삽질후기

목록 보기
3/4

최근 로스트아크에 빠져서 디스코드에서 지인들과 게임하던 나날...
디스코드 봇으로 카드뽑기(전설) 시뮬레이션이나 만들어볼까 싶어서 디스코드봇 API를 찾아봤다.
.net C#으로 디스코드봇을 만들 수 있길래 헉 하고 당장 해봐야겠다 싶어서 도전했다.

Discord.net 공식 문서

필자는 VS2019로 사용했다.

1. linux에서 사용이 가능한 콘솔 어플리케이션 프로젝트생성

1-1 리눅스에서 사용이 가능해야하는 이유는 무료 클라우드 서비스인 Oracle Cloud에 업로드해서 실행시킬 예정이기 때문이다...

2. 해당 프로젝트에서 Discord.net nuget 패키지 설치

2-1 NuGet 패키지 관리 클릭

2-2 Discord.net 설치 나 같은 경우엔 이미 다운로드를 완료했다.
안정된 버전 3.3.2로 설치했다. 해당 패키지 클릭 후 우측에 보면 설치가 나올 것이다.

3. 디스코드 프로그램 작성

디스코드 프로그램을 작성하면 되는데 예제로 참고할만한 링크를 달아두겠다.
[강현구님의 디스코드.net 봇 기초]

4. Oracle Cloud 세팅

PS : 우선 난 이 달소님의 자료를 보고 세팅했다.
4-1 우선 Oracle Cloud 가입해준다
4-2 좌측 하단에 Create a VM Instance를 눌러준다.

4-3 Change Image를 누르고

4-4 Canonical Ubuntu 18.04가 자료가 많다고 해서 18.04로 세팅했다.

4-5 ssh 키 저장
혹시 몰라서 Private Key와 Public Key 다 저장했다. 향후 해당 instance에 접근할때 private key가(.key 파일) 필요하다.

4-6 Create 해주면 된다.

이 단계까지 오면 일단 Instance가 Run 중일텐데 잠시 Visual Studio Code 세팅을 해야한다.

5. Visual Studio Code 세팅

Visual Studio Code를 세팅해줘야하는데 향후 virtual machine에 폴더 관리와 접속을 위함이다.
1. Remote ssh extension 설치

2. remote ssh 세팅
2-1 좌측 하단에 remote explorer를 누르면 이런 창이 나올 것이다. .ssh config로 간다. 사람 별로 경로는 다를 수 있다.

2-2 config 세팅

Host 이름은 아무렇게나 세팅해도 되고
하단에 HostName과 User를 이제 Oracle Cloud instance 창에서 가져와야한다.
IdentityFile의 경우 Oracle Cloud에서 받은 .key파일의 경로를 설정하면 된다.

Instance 관리 창에서 만든 인스턴스에 들어가면 Public IP address를 VS code config HostName에 입력해주고 UserName을 User에 입력해주면 된다.
2-3 remote 접속
HostName으로 생길텐데 우측에 아이콘을 누르면 연결이 된다.

2-4 커맨드 입력
vscode 터미널에서 해당 커맨드를 입력하면 새 창이 열리면서 좌측에 폴더계층구조가 나오면서 액세스 할 수 있게 된다.

code ./


2-5 이제 이렇게 되면 폴더나 파일을 Drag & Drop으로 vm위에 올릴 수 있게 되었다.

6. VM 세팅

이제 대망의 VM 세팅이다. 이것이 끝나면 거의 다 되었다고 할 수 있다.
VM에서 tmux, dotnet 설치가 필요하다.
tmux의 경우는 vm에서 프로세스를 백그라운드에서 돌릴 수 있게 해서 VS code를 끄더라도 계속 vm 위에서 돌아갈 수 있게 해준다.
dotnet의 경우는 VS2019에서 publish 명령어를 통해 뽑아낸 .dll 파일을 돌아갈 수 있게 해준다.
1-1 tmux 설치
해당 커맨드를 입력해주면 설치해준다.

sudo apt-get install tmux


1-2

tmux

해당 커맨드를 입력하면 프로세스가 하나 더 생기게 된다.

2-1 dotnet 설치
dotnet 설치 MS 공식문서
해당 커맨드를 순서대로 입력해주면 되는데

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo snap install dotnet-sdk

sdk를 설치하면 런타임 환경도 세팅되기 때문에 sdk를 설치했다.
dotnet 설치확인은 sudo dotnet 해보면 알 수 있다.
여기까지 되면 vm세팅은 끝이 난 것이다.
이제 VS2019로 가서 publish 명령어를 통해 .dll파일을 뽑아보도록 하자

publish(feat.vs2019)

필자는 VS2019 개발자 PoweShell 커맨드창에서 했는데 (귀찮아서...) 근데 cmd에서도

그림과 같이 가능하다.
커맨드를 입력해주면

dotnet publish -r ubuntu.18.04-x64

빌드도 되고 후에 출력되는 로그를 통해 어디 생성되었는지 알 수 있다.
그리고 이제 해당 위치에 있는 publish 폴더를 드래그앤드랍으로 ubuntu에 넣어주면 된다.

실행

그러면 이제 실행만 남았다.

copy path한뒤 [copypath] 자리에 해당 path 내용을 복붙해주면 된다.

cd [copypath]
sudo dotnet DiscordBotOnLinux.dll

빌드한 .dll파일을 커맨드로 입력해주면

정상실행됨을 알 수 있다. 화면에 나오는 커맨드는 테스트용이지만 실제로는 다른 로그가 나오면서 정상동작함을 알 수 있다.

마치며

.net으로 Discord 봇을 만들기보다는 다들 파이썬이나 js 같이 친숙한 언어로 만들다보니 괜히 오기가 생겨서 더 만들게되었다. 필자의 경우는 C#으로 프로그래밍을 시작해서 .net이 더 익숙해서 만들게 되었다. Hello World 출력시키면 다 끝이다라고 말하는 이유도 이런 이유일 것이다. 환경 세팅이 제일 힘들다...
깔끔하게 정리하지 못해 양해를 구한다... 그전에 .exe로 빌드한 것을 실행하려고 vm에서 윈도우 가상머신 wine도 깔고 별 짓을 다 했지만 제대로 구동되지 않아 삽질을 좀 했다. 하지만 크로스플랫폼을 지원하는 .net이라 다행히 무사히 vm에 올려서 구동까지할 수 있었다. 행여나 .net으로 디스코드 봇을 만들고 친구들끼리 24시간 365일 쓰고 싶은데 쓰지 못해 힘들어하는 분들에게 이 글을 바친다. 긴 글 읽어주셔서 감사드린다.

P.S : 필자의 디스코드봇 GitHub repo 안에 없는 파일은 만들어서 쓰시면 된다.

profile
NdotLight 클라이언트 프로그래머

0개의 댓글