티스토리 뷰
갑자기 디스코드 봇이 만들어보고 싶어진 이유로 아주아주 간단한 디스코드 봇을 만들어봅시다.
기본적으로 필요한것
python (www.python.org/downloads/)
IDE 아무거나(저는 visual studio code)
봇 등록하기
먼저 이 페이지에 들어가보면
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
다음과 같은 화면이 나온다. 여기서 New Application으로 새로운 앱을 만들어줍니다.
만들어주면 이런 화면이 생깁니다.
왼쪽 리스트에서 봇을 눌러준 뒤, (아마) Create bot 을 눌러줍니다. 성격 급한 저는 아무생각없이 바로 눌러서 생겨버렸네요.... 여기서 TOKEN은 아무에게도 알려주지 말고 소중하게 여깁시당.
이제 왼쪽 리스트에서 OAuth2 로 들어갑니다.
scope에 bot을 클릭하고, 아래 bot permission에서 bot이 할 행동들에 권한을 줍니다.
저는 어차피 테스트용이라서... Administrator로 줬습니다. 이제 위에 올라와있는 링크를 copy해서 접속해주면
다음과 같은 화면이 뜹니다. 계속하면 discord에 이렇게 봇이 들어온 걸 확인할 수 있습니다.
이제 봇은 들어왔는데, 오프라인 상태이기 때문에 아무것도 안합니다. 이제 봇이 행동할 수 있도록 만들어봅시다.
봇 실행하기
사전 준비
discord.py
python-dotenv (있으면 좋고, 없어도 상관X)
pip install -U discord.py
pip install -U python-dotenv
cmd에 pip를 사용해서 discord.py (dotenv는 필수가 아닙니당..) 를 설치해봅시다.
이제 준비는 끝났습니다. 아주 간단한 제비뽑기를 만들어 볼겁니다.
import discord
import os
import random
from discord.ext import commands
from dotenv import load_dotenv
먼저, 필요한 내용을 Import 시켜줍니다.
load_dotenv()
DISCORD_TOKEN=os.getenv('DISCORD_TOKEN')
load_dotenv() 를 하면 python 파일이 있는 폴더에 .env에 DISCORD_TOKEN='x' 라고 되어있으면 이 'x'를 가져와줍니당.
굳이 이렇게 안하셔도 상관 없습니다..
DISCORD_TOKEN은 홈페이지에서 BUILD-A-BOT 에 있던 소중하게 여기라던 그 TOKEN 값입니다.
# 봇 부를 때 앞에 뭘 붙일지 필요합니다.
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name} : {bot.user.id}')
commands.Bot은 Extension이라고 하는데요, 이 bot ext를 쓸 땐, 봇이 시도때도 없이 불리는걸 방지하기 위해서인지 꼭 command_prefix를 붙이도록 되어있습니다.
@bot.event
봇이 이벤트를 받아 처리하는 부분입니다. on_ready 는 bot이 준비되었을 때 불리는 부분입니다.
@bot.command(name='제비뽑기')
async def random_choice(ctx, count=1):
"""택 N 당첨"""
results = [m for m in ctx.guild.members if m.bot == False and m.status == 'online']
if count > len(results) or count <= 0:
await ctx.send('invalid data')
return
choices = random.choices(results,k=count)
result = []
for member in choices:
result.append(member.mention)
await ctx.send(f'당첨 : {", ".join(result)}')
bot.run(DISCORD_TOKEN)
@bot.command
봇이 커맨드를 받아 행동할 내용입니다. prefix를 !라고 했으니 !제비뽑기 를 하면 다음 함수가 실행됩니다.
만약 name을 적지 않고 @bot.command() 로만 두었다면 !random_choice와 같이 함수 이름을 치면 실행됩니다.
ctx는 현재 봇이 있는 context(?) 인데요, 이 ctx는 필수로 전달해줘야하는 파라미터이고, 뒤에 count 라던가... 뭐 그런부분은 그냥 사용자가 알아서 집어넣는 부분입니다. 여기서 !제비뽑기 2 를 하면 제비뽑기로 2명을 뽑는거죠..
ctx.guild 채널입니다.
ctx.send() 채팅창에 결과를 적을 수 있습니다.
마지막에 bot.Run을 하면 bot이 실행이 되면서, 모든 채널에서 봇이 online이 됩니다...
이런식으로 돌아갑니다...
여길 참고하시면 도움이 될 것 같습니다..
discordpy.readthedocs.io/en/latest/index.html
Welcome to discord.py — discord.py 1.4.0a documentation
discordpy.readthedocs.io
아마 뭔가 또 적게 된다면 음악 재생과 관련된 내용을 적지 않을까 싶네요...
'Computer' 카테고리의 다른 글
Windows10 에서 Caffe 설치 (0) | 2020.03.01 |
---|---|
마크다운 치트시트 (0) | 2020.03.01 |
[Node.js] Node.js에 oracleDB 연동하기 (0) | 2020.03.01 |
[Oracle] DB 테이블 삭제하기 & 삭제 테이블 복구하기 (0) | 2020.03.01 |