안녕하세요. 깜뭉이입니다.
이전 글에서 응답하는 봇을 만들어 봤습니다만 discord.Client 기반은 봇에 적합하지 않고 대신 discord.Bot을 기반으로 제작하는 것이 좋기때문에 이번에 제대로 된 봇을 만들어 보고자 합니다. 제작하는 과정에서 어려움이 많았는데 특히 대부분 글은 Client를 기반으로 제작한 글이여서 참고할게 적더라구요. 그래서 이번에 디스코드 봇을 제작하는 글을 쓰게된 계기가 되었습니다. 그리고 discordpy가 1.3버전으로 업그레이드 되면서 코드가 마이그레이션이 되었습니다. 그래서 이전 버전의 discordpy와 변경점이 있어서 구글링시 오류가 나는 경우도 생겼습니다. 그러니 만드실때 꼭 API문서를 참조하시면서 만드시는게 좋습니다. 사설이 길었습니다. 시작하겠습니다.
discord.Bot 기반으로 작성한 코드는 아래와 같습니다.
import asyncio,discord
from discord.ext import commands
#봇의 설정
token = "토큰 값 입력" #시작하기 글에서 토큰 값을 복사해 넣어줍니다.
game = discord.Game("!도움") #다른 봇을 보면 상태창에 -help 이렇게 적힌걸 보실수 있을 겁니다.
bot = commands.Bot(command_prefix='!',status=discord.Status.online,activity=game)
#봇 시작
@bot.event
async def on_ready():
print("봇 시작")
bot.run(token)
이전 Client 기반과 지금은 큰 차이는 없지만, 몇몇 코드를 설명하면서 넘어가겠습니다.
import asyncio,discord는 필요한 API를 끌어와줍니다. 둘은 꼭 필요한 API입니다. 없으면 절대 안됩니다.
token 은 주민등록번호와 같은 존재입니다. 토큰 값이 노출되면 아주 위험합니다. 해킹의 우려가 생기기 때문이죠. 그러니 잘 관리하세요. 저는 아래와 같이 따로 파일을 둬서 관리합니다.
import os
token_path = os.path.dirname( os.path.abspath( __file__ ) )+"/token.txt"
t = open(token_path,"r",encoding="utf-8")
token = t.read().split()[0]
print("Token_key : ",token)
해당 코드를 위 코드에 더해주면 됩니다. import os로 파일을 불러올수 있게끔 해주는게 포인트. 그리고 run.py가 있는 폴더에 token.txt를 만들어서 안에 토큰값을 저장해 따로 보관하는 방식을 사용합니다. github에 올릴 때도 token.txt는 ignore처리 하면 토큰값이 노출될 일이 없겠죠?
그다음 commands.Bot 입니다.
command_prefix 는 해당 구문이 맨 앞에 있을때 명령어로 인식한다는 겁니다.
현재 '!' 로 설정 되어 있죠? 향후 명령어를 추가하고 명령을 실행하려면 !도움, !안녕 이렇게 맨 앞에 '!' 가있어야 명령어로 인식합니다. 서버에서 사용하는 다른 봇과 겹치지 않게 잘 설정 해주세요.
status 는 봇의 상태 값입니다. 온라인, 자리비움 등 설정할 수 있는데 status값이 없으면 온라인이 기본 값 입니다.
activity 는 상태말이라고 보면 편합니다. 디스코드에서 유저들의 상태를 보면 League of Legend 하는중.. 이렇게 적혀있는걸 보실 수 있으실텐데 그곳을 채워주는 겁니다. game = discord.Game() 내 텍스트를 편집해주시면 됩니다.
그럼 명령어로 간단하게 응답하는 봇을 만들어 보면서 이번 글은 마치도록 하겠습니다.
import asyncio,discord,os
from discord.ext import commands
#토큰
token_path = os.path.dirname( os.path.abspath( __file__ ) )+"/token.txt"
t = open(token_path,"r",encoding="utf-8")
token = t.read().split()[0]
print("Token_key : ",token)
game = discord.Game("!도움")
bot = commands.Bot(command_prefix='!',status=discord.Status.online,activity=game,help_command=None)
@bot.event
async def on_ready():
print("봇 시작")
@bot.command()
async def 도움(ctx):
await ctx.send("무엇을 도와드릴까요?")
bot.run(token)
봇을 저번처럼 파워셀을 통해서 온라인 시키고, 봇이 있는 채널에서 !도움을 입력해보세요.
그럼 봇은 무엇을 도와드릴까요? 라고 대답합니다.
'Project > Make a Discord Bot with Python' 카테고리의 다른 글
파이썬으로 디스코드 봇 만들기 .06 - API 사용하기(1). (13) | 2020.08.01 |
---|---|
파이썬으로 디스코드 봇 만들기 .05 - 이벤트 활용하기. (40) | 2020.06.02 |
파이썬으로 디스코드 봇 만들기 .04 - Embed 활용하기. (8) | 2020.04.20 |
파이썬으로 디스코드 봇 만들기 .02 - 튜토리얼 (62) | 2020.02.11 |
파이썬으로 디스코드 봇 만들기 .01 - 준비하기 (15) | 2020.02.11 |
삽질의 기록과 일상을 남기는 블로그입니다. 주로 React Native를 다룹니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!