1.파이썬을 이용한 디스코드 봇 만들기: 디스코드 봇 생성

3 분 소요

디스코드 봇을 만들어보자!

가장 먼저 할것은 간단한 디스코드 봇을 만들어보는것 입니다. 파이썬에 대한 기본 지식만 있다면 누구든지 쉽게 만들어볼 수 있습니다.

1. 간단한 디스코드 봇 생성

저희는 디스코드 봇을 위한 파이썬 API인 discord.py를 이용해 만들어보겠습니다.
먼저 개발환경에 discord.py 라이브러리를 설치해야합니다.

discord.py는 파이썬 3.5.3 이상의 버전에서 작동합니다.

pip install discord.py 

파이썬의 pip을 이용한 라이브러리 설치에 대해 익숙치 않으신 분들은 여러 글들을 찾아보시면 도움이 많이 될겁니다.

그럼 이제 사용할 라이브러리 설치가 끝났으니 직접 .py 파일을 만들어봅시다!

discord.py 라이브러리는 discorddiscord.ext를 제공하는데, 이때 discord.ext는 기존에 비해 추가된 함수들의 폴더로 기존의 discord 함수에 있는 명령어들 보다 체계적이고 깔끔하게 코드를 구현할 수 있습니다. 따라서 저희는 discord.ext에서 제공하는 함수들로 코드를 작성해보겠습니다.

  • myFirstBot.py 파이썬 파일 생성
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print("봇이 시작되었습니다.")

@bot.command()
async def 안녕(ctx):
    await ctx.send('반갑습니다')

bot.run('token')

이때 commands.Bot이 저희가 만들게 되는 봇의 인스턴스입니다. 매개변수로 값을 입력하여 봇의 여러 기본 설정들을 해줄 수 있는데 이는 다음에 더 깊게 알아보겠습니다.

저희가 만든 bot은 크게 두가지의 방식으로 작동하며 이를 꼭 명시하여 구분해주어야 합니다.

  1. @bot.event
    어떤 이벤트가 발생할때 봇이 그 사건을 인식하고 코드에 작성된대로 작동하는 것
    예를 들어 봇이 시작된경우, 봇이 새로운 서버에 접속한 경우, 새로운 사람이 서버에 입장한 경우, 어떤 사람이 보이스 채널에 접속한 경우 등 수많은 이벤트들이 존재합니다. 이는 discord.py 문서 홈페이지에서 찾아볼 수 있습니다.

    앞서 저희가 작성한 코드를 보면 on_ready() 이벤트가 발생시 해당 print문이 작동하게 되는 것 입니다. 이때 on_ready() 이벤트는 봇이 실행되어 디스코드 서버에 접속하여 데이터를 전달받을 준비가 끝난 경우를 뜻합니다.

  2. @bot.command()
    설명에 앞서서, 모든 봇의 명령어 앞에는 사용자의 채팅이 봇에게 명령을 하는것인지, 아닌지를 판별하기 위한 접두사(prefix) 가 존재합니다. 저희는 commands.Bot 객체를 생성하면서 해당 접두사를 !로 설정해주었습니다. 이는 봇의 모든 명령어 앞에는 !를 붙여야 한다는 의미입니다.

    앞서 저희 코드에서 async def 안녕(ctx):으로 작성된 부분을 보면 사용자가 채팅 채널에 !안녕 이라는 메세지를 보낼경우 봇이 작동하게 됩니다. 따라서 봇이 어떤 명령어를 가질 것인지, 어떤 명령어에 어떤 작동을 할 것인지 자유롭게 작성할 수 있습니다.

2. 봇의 작동을 위한 토큰 값 얻기

기본적인 봇의 작성은 끝났지만 봇을 실제로 작동시키려면 해당 봇이 가지는 고유한 토큰 값이 있어야 합니다. 이는 디스코드 계정만 있다면 쉽게 토큰 값을 얻을 수 있습니다.

먼저 Discord Developer Portal 에 접속하여 디스코드 계정으로 로그인 한뒤 Applications 로 이동해봅시다.

discord

다음 오른쪽 상단에 있는 New Application을 클릭하여

discord2

봇의 이름을 정한후 생성하도록 합시다!

discord3

하지만 아직 봇이 생성된 것은 아닙니다! 왼쪽 메뉴에 Bot에 들어가서 Add Bot을 클릭 하여 저희가 생성한 Application을 봇으로 추가할 수 있습니다.

discord4

실제 봇이 생성된 모습입니다! 사용자는 직접 봇의 프로필을 언제든지 수정할 수 있습니다.
이제 저희가 생성한 봇의 고유한 토큰 값이 생성되었습니다.
Click to Reveal Token을 클릭하여 토큰 값을 직접 확인할 수 있습니다.

[주의!] 고유한 토큰 값은 절대 외부에 유출되어선 안됩니다.

만약 토큰값이 공개되었을 경우 해당 홈페이지의 Regenerate 를 통하여 토큰을 새로 받을 수도 있으며 저의 경우는 GitHub를 통해 실수로 토큰 값을 함께 Push 한적이 있었고, 이때 디스코드에서 이를 알아채고 자동으로 토큰 값이 재생성된 경우가 있었습니다.

이제 코드 마지막 부분에 bot.run('token')에서 자신의 토큰 값을 넣어봅시다. 그리고 코드를 실행해봅시다!

discord5

3. 봇을 내 디스코드 서버에 가져와 테스트 해보기

이제 봇이 정상적으로 만들어졌으니 봇을 직접 디스코드 서버에 초대해봅시다!
Discord Developer Portal에서 OAuth2에 들어간뒤 해당 봇의 SCOPESBOT PERMISSIONS를 체크하게 되면 봇을 초대할 수 있는 URL이 생성됩니다.

봇의 범위와 권한을 설정함으로써 봇이 정상적으로 작동하는데 필요한 권한을 얻을 수 있습니다.

discord6

봇을 디스코드 서버에 초대한뒤 !안녕 명령어를 입력해봅시다!

봇이 정상적으로 동작하는 것을 확인할 수 있습니다.
다음 글에서는 봇의 기본 설정들과 discord 라이브러리의 여러 클래스들에 대해 알아보겠습니다. 감사합니다!

부록.

1. 디스코드 봇을 실행한 후 해당 오류가 발생할 수 있습니다.

raise LoginFailure('Improper token has been passed.') from exc
discord.errors.LoginFailure: Improper token has been passed.

이는 코드에 입력된 토큰 값이 적절하지 않은 경우입니다. 토큰 값은 String형태의 매개변수를 받습니다. 혹시 토큰 값을 잘못 입력하지는 않았는지 확인해보세요.

  • 예) 토큰 12345678910 의 경우 bot.run('12345678910') 와 같이 입력해야함.

2. 토큰 값을 코드에 포함하지 않고 싶은 경우

이는 파일 시스템을 이용하여 쉽게 구현할 수 있습니다.

  1. 먼저 파이썬 코드가 있는 경로 내에 새로운 파일을 생성합니다 예) .token
  2. .token파일에 고유한 토큰 값을 입력하여 저장합니다.
  3. 파이썬의 os 라이브러리를 이용하여 해당 파일을 읽어 토큰 값을 불러옵니다.
     import os
    
     token_path = os.path.dirname(os.path.abspath(__file__)) + '/.token'
     with open(token_path, 'r', encoding='utf-8') as t:
         token = t.readlines()
           
     ...코드 생략...
    
     bot.run(token)
        
    

댓글남기기