프로그래밍/Discord Bot

디스코드 봇 만들기 대작전 (1) - 메시지 출력

Koil 2024. 1. 9. 16:13

 

https://koilsdevelopment.tistory.com/2

 

디스코드 봇 만들기 대작전 (0) - 준비

개발 블로그의 첫 게시글은 디스코드 봇으로 장식하고자 한다. 물론 인풋을 쌓고 쌓아 날 함양하는 것도 좋다지만, 인풋만큼 중요한 건 아웃풋이다. 내가 이걸 뱉어냄으로서 제대로 소화해냈는

koilsdevelopment.tistory.com

이전 화에서 디스코드 봇을 만드는 과정에 대해 알아봤다. 우리는 우리만의 디스코드 서버를 구축하고 어플리케이션을 활성화하여 봇을 소환해냈다. 왜이리 말이 번지르르하냐고 묻는다면 그냥 이렇게 표현해보고 싶었다. 아무튼, 이제 육신도 준비했으니 그토록 고대하던 뇌를 구성하는 시간이 찾아왔다. 우리는 지금부터 디스코드 봇에게 코드를 부여하여 실제로 작동이 가능하게 만들 예정이다.

 


0. VSCode 세팅

필자는 VSCode를 정말 좋아하기 때문에 VSCode를 이용해 코드를 짜보고자 한다. 앞으로 진행하는 과정 또한 VSCode 환경에서 실행시킬 계획이다. 이를 위해선 VSCode와 파이썬 파일이 필요하다.이에 대해선 파이썬 설치 링크와 함께 정말 좋은 강좌링크가 있어서 이를 첨부하고자 한다.

 

링크에 들어가기에 앞서 한가지 일러두자면, 인스톨러를 이용한 파이썬 설치시 PATH 관련 설정이 체크박스가 있을 것이다. 가능하면 꼭 체크하는 것을 추천한다. 그러면 알아서 환경 변수 설정까지 진행해줘서 번거롭게 수동으로 경로를 지정할 필요가 없어질 것이기 때문이다.

https://www.python.org/downloads/release/python-31011/

 

Python Release Python 3.10.11

The official home of the Python Programming Language

www.python.org

 

다음으로 VSCode에 파이썬 환경을 구축하는 강좌다.

https://www.codingfactory.net/11337

 

Python / Visual Studio Code 개발 환경 만들기

파이썬 개발을 위한 도구는 여러 가지가 있습니다. Visual Studio Code도 그 중 하나입니다. VS Code에 Python 확장 기능을 설치하고, Hello World를 출력해보겠습니다. 확장 기능 설치 Visual Studio Code를 설치

www.codingfactory.net

 

여기까지 따라왔으면 이제 컴퓨터 환경에 discord.py를 설치해놔야 한다. 윈도우 기준 powershell에 다음과 같이 코드를 입력해준다.

pip install discord.py

 

이후 코드를 적을 파일을 생성한다. 파일명.py의 규칙으로 파일을 생성하도록 하자.

 

 

1. 예제코드

세팅은 끝냈는가? 그럼 축하한다. 지금부터는 코딩의 영역에 본격적으로 들어서게 된다. 참고로 필자는 두괄식 설명을 좋아하기 때문에, 앞으로 전체 코드를 먼저 보여준 뒤에 각 줄에 대해 분석하는 식으로 진행해보고자 한다.

 

하지만 코드를 작성하기에 앞서, 우리는 봇의 토큰을 얻어야 한다.

https://discord.com/developers/applications

 

Discord Developer Portal — API Docs for Bots and Developers

Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.

discord.com

다시 한 번 디스코드 개발자 페이지로 들어가서, 미리 생성해둔 어플리케이션에 들어간 뒤, 봇 메뉴를 확인한다.

이 페이지를 기억하는가? 여기서 봇에 대한 기본적인 설정을 할 수 있었다. 여기서 TOKEN 항목이 있는데, 우리는 여기서 토큰을 가져와야 한다. 토큰이 있다면 복사해주고, 만약 토큰이 나오질 않는다면 Reset Token 버튼을 눌러 토큰을 발급받도록 하자.

 

이제 정말 코딩의 코딩의 시간이다. 아까 생성한 파일명.py 파일에 다음과 같은 코드를 입력한 뒤, Ctrl+f5 버튼으로 코드를 실행하면 된다. 

import discord
from discord.ext import commands

app=commands.Bot(command_prefix='/', intents=discord.Intents.all())

@app.event
async def on_ready():
    print('Bot is Working Now!')

@app.command()
async def hello(ctx):
    await ctx.send('Hello Discord!')

app.run('사용하고자 하는 봇의 토큰')

만약 Ctrl+f5의 실행방식이 마음에 들지 않는다면, 임의의 powershell 터미널을 열어 다음과 같은 명령어를 입력해도 좋다.

python 파일명.py

 

실행 결과다. 다음과 같은 결과가 나왔다면 당장 디스코드로 달려가서 명령어를 입력해보자.

 

 

실행이 잘 되는 모습이다. 그럼 어떻게 해서 이런 결과가 나온 것인가? 예제 코드를 하나씩 분석해보자.

 

2. 코드 분석

import discord
from discord.ext import commands

맨 처음 디스코드에 대한 모듈을 가져오는 부분이다. discord.py 모듈을 가져온 뒤, 모듈 내에 존재하는 명령어들을 가져온다.

app=commands.Bot(command_prefix='/', intents=discord.Intents.all())

봇의 기본 정보를 입력하는 부분이다. 어떤 키워드를 통해 명령어를 입력받을지 정하는 부분이다.

commands.Bot의 매개변수로는

1. 어떤 키워드를 통해 명령어를 인식할 것인가

2. intents의 볌위는 어디까지 할 것인가

에 대한 정보를 받는다.

@app.event

봇의 이벤트 상황에 대한 내용을 선언하는 곳이다. 이후에 필요한 이벤트 상황에 대해 코드를 설정하면 된다. 관련 내장함수 목록은 아래 링크를 참고할 것.
https://discordpy.readthedocs.io/en/stable/api.html?highlight=client%20event#discord-api-events

 

API Reference

Loads the libopus shared library for use with voice. If this function is not called then the library uses the function ctypes.util.find_library() and then loads that one if available. Not loading a library and attempting to use PCM based AudioSources will

discordpy.readthedocs.io

async def on_ready():
    print('Bot is Working Now!')

discord.py 에서 제공하는 내장함수들 중, on_ready를 사용했다. 이는 봇이 사용 준비가 되었을 때 실행되는 함수로, 함수 내의 내용은 봇이 작동함을 알리는 print문이 적혀있다.

@app.command()

봇이 받게 될 명령어에 대한 내용을 선언하는 곳이다. 이 코드 이후의 함수명이 명령어 그 자체가 된다.

async def hello(ctx):
    await ctx.send('Hello Discord!')

디스코드에서 /hello를 입력할 시, 해당 함수가 실행된다.

app.run('사용하고자 하는 봇의 토큰')

해당 토큰을 가진 봇에 작성한 코드를 실행한다.

 


여담이지만 프로그래밍을 새로 공부할 때, 늘 'hello world'를 바라보는 순간이 가장 설레는 것 같다. 내가 겪어보지 못한 미지의 영역에 새로이 발을 들일 때의 느낌이란, 그리고 내가 새롭게 배우는 코드가 잘 작동함을 확인할 때의 짜릿함이란 그 무엇에 견주어도 비교할 수 없는 소중한 경험이라고 생각한다. 그래서 프로그래밍에 재미를 가지고 개발을 임하고 있는 것 같다. 이런 흥미를 가지고 꾸준히 개발에 임하고 싶다. 언제까지고 개발이 재미있는 그 마음을 오래도록 안고 가고 싶다.

 


참고 링크

https://www.jongung.com/199

 

[Discord.py] 1. 디스코드 봇 개발의 기초

한창 JS를 하다가 Python에 이번엔 제대로 입문 해보려고 토이 프로젝트를 만들려고 생각했다. 고민 고민 하다보니, 내가 카카오톡 다음으로 많이 사용하는 채팅 프로그램인 Discord 봇 개발 관련으

www.jongung.com

https://discordpy.readthedocs.io/en/stable/index.html#

 

Welcome to discord.py

 

discordpy.readthedocs.io