파이썬으로 디스코드 봇 만들기 2 - 간단한 코드 작성해보기

2020. 8. 25. 10:54discord.py

지난번 강좌에서는 파이썬/파이참 설치 및 세팅하기,  봇 생성하고 서버에 초대하기를 알려드렸습니다.

봇을 생성했으니, 오늘은 봇이 작동하게 코드를 작성해 봅시다.


 

파이참을 실행하고, 지난번 생성한 봇 파일을 열어줍시다.

아래가 봇 코드의 기본적인 구조입니다.

# -*- coding:utf-8 -*-

import discord
import asyncio

token = "봇의 토큰"
client = discord.Client()

@client.event
async def on_ready():
  await client.change_presence(status=discord.Status.online, activity=discord.Game("ㅎㅇ"))
  print("봇 실행됨!")
  print(client.user.name)
  print(client.user.id)
  
@client.event
async def on_message(message):
  if message.author.bot:
    return None
  
  if message.content == "!안녕":
    await message.channel.send("안녕하세요!")
    

client.run(token) 

위 코드에 대한 상세한 설명을 해드리겠습니다.

 

"# -*- coding:utf-8 -*-"

이 코드가 없으면 파이썬 인터프리터가 인코딩을 잘못 읽어서 오류가 납니다.

 

일단 import discord, import asyncio 로 필요한 모듈을 임포트 해줍니다. (파이참에서 모듈 설치법은 1편을 보시면 나옵니다.)

 

token 에는 1편에서 복사해 두었던 봇의 토큰을 넣어주면 됩니다.

token = "hWVEFUQWEBOFQBWEGEWHGPEWRGWEG"

이런식으로 말이죠.


 

client = discord.Client()

이 부분은 discord.Client() 대신 client 로 줄여서 사용하겠다는 뜻입니다.

client 대신 app, bot 등 자신이 원하는 변수로 바꿔도 되지만, 이 블로그에서는 client로 사용하도록 하겠습니다.


 

@client.event
async def on_ready():
    await client.change_presence(status=discord.Status.online, activity=discord.Game("ㅎㅇ"))
    print("봇 실행됨!")
    print(client.user.name)
    print(client.user.id)

이 부분은 봇이 처음 실행될 때 1번 실행되는 코드입니다.

await client.change_presence(status=discord.Status.online, activity=discord.Game("ㅎㅇ"))

이 코드는 봇의 상태를 온라인으로 바꾸고, 봇의 상태 메시지를 "ㅎㅇ" 로 설정합니다.

discord.Status.online 에서 online을 idle로 바꾸면 자리비움, dnd로 바꾸면 다른용무중으로 표시됩니다.

밑에 print 문은 봇의 이름/아이디를 출력하고, 봇이 실행되었다는 메시지를 보냅니다.


 

@client.event
async def on_message(message):
    if message.author.bot:
        return None
    if message.content == "!안녕":
        await message.channel.send("안녕하세요!")

 

이 부분은 메시지가 입력됐을 때 실행되는 부분입니다.

 

if message.author.bot:
    return None

 

만약 메시지를 입력한 사람이 봇이라면, 무시하는 코드입니다.

필수는 아니지만, 봇이 보내는 메시지는 무시하는 것이 좋습니다.

if message.content == "!안녕":
    await message.channel.send("안녕하세요!")

 

"!안녕" 이라는 메시지가 입력되면 실행되는 코드입니다.

저는 "안녕하세요" 라는 메시지를 명령어를 입력한 채널에 보내도록 만들어 놓았습니다.

메시지 출력 말고도 봇의 주제에 맞게 원하는 기능이 실행되도록 자유롭게 만드시면 됩니다.

 

message.content 변수는 입력된 메시지의 내용을 가지고 있는 변수입니다.(문자열, str)

 

message.channel.send 대신 message.author.send 를 사용하면 명령어를 입력한 사람에게 DM을 보낼 수 있습니다.


client.run(token)

마지막 코드입니다.

이 코드는 항상 코드의 마지막에 위치해야 합니다.

이 코드가 없다면 봇은 작동하지 않으므로, 꼭 넣어주셔야 합니다.


이제 코드를 작성한 후, Run 을 눌러 실행 해 봅시다.

정상적으로 실행 되었습니다.

 

이상 디스코드 봇 만들기 2편이였습니다.

다음편도 기대해 주세요!