반응형

디스코드 봇 만들기

 

디스코드 봇 만들기

예~전에 디스코드 봇을 만들어보려고 했었을 땐 파이썬으로 만드는 봇은 지원종료가 된다고 했었는데 최근에 확인해보니까 지원 재개를 시작하더라구요..! 간단하게 봇을 만들어 보겠습니다. -

soopeach.tistory.com

위의 링크에서 간단하게 디스코드 봇을 만들고 서버에 추가하는 작업까지 완료하였습니다.

이번에는 파이참(IDE)을 이용해서 간단하게 봇을 실행시켜보고 기본적인 명령어들을 실행시켜보겠습니다.

파이참 다운로드

https://www.jetbrains.com/ko-kr/pycharm/download/#section=mac

 

다운로드 PyCharm: JetBrains가 만든 전문 개발자용 Python IDE

 

www.jetbrains.com

파이참은 IntelliJ를 만든 JetBrains사의 Python용 IDE(Integrated Development Environment)입니다.

순수 Python 개발을 위한 커뮤니티 버전은 무료로 다운이 가능합니다! 전문가용은 유료이지만 대학생이라면 이메일로 학생 인증을 받아 무료로 사용이 가능한 것으로 알고 있습니다!

아래의 설명들은 파이참을 기준으로 진행하겠습니다.

Token(토큰) 값 받아오기

처음 디스코드 봇(어플리케이션 및 봇)을 생성한 링크로 이동하여 어플리케이션 - 봇으로 접속하여줍니다.

화면 중앙에 보이는 Reset Token을 누르면 토큰값을 보여주는데 단 한 번만 보여주기 때문에 복사해놓거나 메모해 놓아야 합니다.

discord 모듈 다운

프로젝트를 생성 후 하단의 터미널(terminal)로 들어가 pip install discord 명령어를 입력하여 모듈을 다운로드하여줍니다.

저는 이미 모듈을 다운로드한 상태라 위와 같이 이미 존재한다고 알려주지만 처음 모듈을 다운로드하게 된다면 다운로드하는 과정이 출력될 것입니다.

기본 코드 작성

모듈을 다운로드한 후 

from data import Token # 토큰 값을 가져옴.
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='$') # 명령어의 시작이 $ ex) $안녕

@bot.event
async def on_ready():
    print(f'{bot.user.name}이 연결 되었습니다.')
    await bot.change_presence(status=discord.Status.online, activity=None)

bot.run(Token)

(제 기준 main.py)에 위와 같은 코드를 작성하여줍니다. 여기서 쓰이는 토큰 값은 위에서 Reset Token을 통하여 가져온 토큰 값입니다.

 

from data import Token은 보안을 위해 토큰 값을 data.py 파일에서 가져오는 과정입니다.

data.py는 이런 식으로 구성되어있습니다.

 

bot = commands.Bot(command_prefix='$') 부분은 ' ' 안에 들어간 문자로 명령어를 시작하게 됩니다.

저는 $를 넣어주었기 때문에 $명령어 ex) $안녕  과 같은 식으로 명령어를 사용합니다.

 

맨 아랫줄 bot.run(Token)을 통해 data에서 가져온 토큰 값으로 봇이 실행되게 됩니다.

from data import Token을 지우고 bot.run("위에서 받아온 토큰 값") 이런식으로 직접 입력해주어도 됩니다. 

위와 같이 입력하고 코드를 실행하면 디스코드 서버에서 오프라인이었던 봇이 온라인 상태로 바뀌었고 콘솔 창에는 SooBot이 연결되었습니다. 가 출력된 것을 확인할 수 있습니다.

 

간단한 명령어들

전체 main.py 소스 코드

 

호출자 멘션 및 인사

@bot.command()
async def 안녕(ctx):
        await ctx.send("{}아, 안녕".format(ctx.author.mention))

위의 코드는 $안녕 이라는 명령어를 디스코드에 사용하면 "{명령어를 사용한 사람을 멘션}아, 안녕" 을 출력해줍니다.

ctx.author.mention은 명령어를 입력한 사람을 멘션 한다는 뜻이고, .format()은 {}에 적용이 됩니다.

입력받은 문자열 그대로 반환

@bot.command()
async def 복사하기(ctx,*,text):
    await ctx.send(text)

위의 코드는 $복사하기 뒤에 적힌 모든 문자열을 그대로 반환해줍니다.

복사하기의 인자로 들어간 *이 띄어쓰기를 구분해 주고 나머지 입력받은 문자열 그대로가 text에 들어가게 됩니다.

입력받은 문자열 공백을 나눠서 반환

@bot.command()
async def 공백나눠서복사하기(ctx, *args):
    await ctx.send(args)

위의 코드는 $공백나눠서복사하기 뒤에 적힌 문자열을 공백을 기준으로 나누어 반환해줍니다.

args에 공백을 기준으로 Tuple 타입으로 데이터가 저장됩니다.

명령어를 실행시키는 코드 추가

@bot.command(aliases=['hello','인사'])
async def 안녕(ctx):
        await ctx.send("{}아, 안녕".format(ctx.author.mention))

위의 코드는 @bot.command()의 ()안에 aliases=['hello','인사']가 추가되었습니다. 따라서 아래 안녕이라는 명령어는 $hello, $인사 를 호출하는 것으로도 실행이 됩니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기