이번 포스트에선 이전에 준비한 개발환경을 사용해서 디스코드 봇의 기본 코드를 입력하고, 봇의 상태를 변경해보겠습니다.

1. 작업 폴더와 실행 파일 만들기

VS Code를 실행하여 작업할 폴더를 만들고, Main.py 파일을 생성하겠습니다. Open Folder를 눌러 파일 탐색기를 열고, 폴더를 만들어줍니다. 폴더를 만들면 EXPLORER 탭에 생성한 폴더의 이름이 추가됩니다.

New File 을 누른 뒤 Main.py를 생성하여 봇의 기본적인 코드를 입력할 .py 형식의 파일을 만들어줍니다. 이때 VS Code에서 Python EXTENSION을 설치하라고 할 수 있습니다. 꼭 같이 설치해서 개발에 지장이 없도록 해줍니다.

2. 필수 라이브러리와 모듈 불러오기

import discord #disrod 불러오기
from discord import app_commands #discord 에서 app_commands 라이브러리 불러오기
from discord.ext import commands #discord 에서 commands 라이브러리 불러오기

 

사람에 따라 app_commands만 사용하기도, commands만 사용하기도 합니다만 필자는 2개 다 사용합니다. 각각의 장단점이 분명하기에 상황에 따라서 사용해야합니다.

3. 토큰값과 명령어를 사용할 커맨드 지정

이전 포스트에서 디스코드 봇 Application을 생성했습니다. Discord Dev로 이동하여 해당 봇의 토큰값을 가져와야합니다.

지난번에 생성한 Application에 들어가서 Bot을 눌러주면 TOKEN 값이 있습니다. 지난 번에 따로 복사해두지 않았기에 Reset Token 버튼을 눌러서 새로운 토큰을 받아줍니다. 이 TOKEN은 앞으로 개발에 필수로 사용됩니다. 다시 Reset Token을 할 일이 없도록 메모장 등을 활용하여 잘 저장해줍시다.

 

Token = " " #공백에 디스코드 토큰을 입력해줍니다.

 

이 Token을 py 파일로 저장하여 보다 안전하게 저장하는 방법도 있습니다. 아직 GitHub를 사용하여 연동을 하진 않을 거기에 당장엔 Main.py에 직접 입력하는 방식을 사용합니다.

bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

 

지금 개발하는 디스코드 봇을 호출할 명령어를 지정하는 코드를 입력해줍니다. command_prefix 명령어는 봇에게 사용할 명령어를 지정해주는 코드입니다.

command_prefix='!' 를 입력하면 이렇게 !를 사용하는 명령어를 만들 수 있게합니다. 굳이 느낌표를 사용할 필요 없이 원하는 특수문자를 사용하여 자신만의 봇 호출 커맨드를 만들어줍니다. 

intents=discord.Intents.all() 을 입력하게 되면 디스코드 봇이 사용할 intents 클래스의 전체를 활성화시켜주는 코드입니다. 기본적으로 필요한 intents를 True 값을 입력하여 활성화시켜주는게 맞지만, 하나하나 작업하기 번거로우니 모든 intents 를 활성화해줍니다.

@bot.event
async def on_ready():
    await bot.change_presence(status=discord.Status.)
    await bot.change_presence(activity=discord.)

 

@bot.event 는 봇의 이벤트에 따라 실행될 코드입니다.

async def on_ready(): 는 봇이 정상적으로 준비됐을 경우에 사용되는 코드입니다. 봇이 시작됐을 때 가장 먼저 사용해야할 코드이기에 상단에 배치해주도록 해야합니다.

await bot.change_presence 는 봇의 상태를 변경하는 코드입니다.

status=discord.Status. 는 온라인, 자리비움, 다른 용무중, 오프라인을 표시하는 상태 를 변경하게 해줍니다.

  await bot.change_presence(status=discord.Status.online) #온라인
  await bot.change_presence(status=discord.Status.idle) #자리 비움
  await bot.change_presence(status=discord.Status.dnd) #다른 용무 중
  await bot.change_presence(status=discord.Status.offline) #오프라인

 

activity=discord. 은 @@하는 중, @@듣는 중 과 같은 행동을 표시할 수 있게 해줍니다.

 await bot.change_presence(activity=discord.Game(name="@@")) #@@ 하는 중
 await bot.change_presence(activity=discord.Streaming(name="@@", url='방송 링크')) #@@ 방송중
 await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name="@@")) #@@ 듣는 중
 await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="@@")) #@@ 시청 중

 

여기 나와있는 형식으로도 사용할 수 있지만 이 상태를 커스텀하여 출력하는 방법도 있습니다.

def get_status_message(bot):
    server_count = len(bot.guilds)

    subs_files = [
        '1.json',
        '2.json',
        '3.json',
        '4.json',
        '5.json'
    ]

    user_ids = set()
    for file_name in subs_files:
        try:
            with open(file_name, 'r', encoding='utf-8') as f:
                data = json.load(f)
                user_ids.update(data)
        except Exception as e:
            print(f"{file_name} 읽기 중 오류 발생: {e}")

    user_count = len(user_ids)
    return f"{server_count}개의 서버에서 {user_count}명의 유저가 사용중"

 

위 코드는 필자가 제작하여 배포한 봇의 상태를 표시하는 코드입니다. 이 코드를 단계적으로 풀어보겠습니다.

server_count = len(bot.guilds)

 

len(bot.guilds) 코드는 봇이 가입된 서버를 불러오는 코드입니다.

subs_files = [
        '1.json',
        '2.json',
        '3.json',
        '4.json',
        '5.json'
    ]

    user_ids = set()

 

불러올 .json 파일을 subs_files = [] 에 입력한 뒤 해당 .json 파일에서 중복을 방지하기 위해 set() 을 사용해줍니다.

for file_name in subs_files:
        try:
            with open(file_name, 'r', encoding='utf-8') as f:
                data = json.load(f)
                user_ids.update(data)
        except Exception as e:
            print(f"{file_name} 읽기 중 오류 발생: {e}")

    user_count = len(user_ids)

 

앞서 입력해둔 .json 파일들을 불러온 뒤 문제 없이 파일을 읽을 수 있도록 encoding='utf-8' 으로 수정해주고 파일이 리스트로 저장돼있으니 user_ids.update(data) 로 수정합니다. 만약 유저 ID가 Key 타입으로 저장돼있는 경우 user_ids.update(data.keys()) 로 코드를 작성해야합니다.

어떤 오류가 발생했는지 확인하기 위해서 확인할 수 있는 코드를 작성해주고 user_count = len(user_ids) 를 통해 불러온 json 파일에서 몇 명의 유저가 있는지 확인합니다.

await bot.change_presence(activity=discord.CustomActivity(name=status_message))

 

이런식으로 CustomActivity 를 사용한 뒤에 status_message 를 호출해서 사용하면 상태메시지를 커스텀하여 표시할 수 있습니다.

사용 예시

이번 포스트에선 봇을 구동하기 위한 기본적으로 불러와야할 모듈 그리고 봇 상태를 커스텀하는 방법에 대해 알아보았습니다.

봇 상태를 수정함으로써 개인이 만든 봇에 개성을 담을 수 있기 때문에 유용하게 사용할 수 있고 다양한 정보를 입력할 수 있는 유용한 기능이기 때문에 알아두면 충분히 유용하게 사용하기 좋습니다.

 

감사합니다.

'Python > Discord' 카테고리의 다른 글

파이썬으로 디스코드 봇 만들기 - 개발 환경 세팅  (0) 2025.05.06

파이썬으로 디스코드 봇을 만드는 방법으로는 Discord.py 또는 Pycord를 사용하여 만들어야 합니다.

어떠한 라이브러리를 선택하냐에 따라서 방법이 조금은 다릅니다. 이 포스트에서는 Discord.py를 사용하여 봇을 만들어보겠습니다.

 

1. 코드 에디터 설치하기

코드 에디터는 Visual Studio Code (약칭 VS Code)를 사용할 것이기에 VS Code를 설치해 줍니다.

홈페이지에 접속했다면 화면에 보이는 Download를 눌러서 설치 파일을 받아낸 뒤 설치를 진행합니다. 

대략 402Mb 정도의 용량을 필요로 하며 별도의 비용이 추가되지 않는 무료 소프트웨어입니다.

2. 파이썬 설치하기

디스코드 봇을 만들 수 있는 여러 언어가 존재하지만 파이썬을 통해 만들 것이기에 파이썬을 설치해 줍니다.

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

 

Downloads를 눌러서 최신 버전을 설치해 줍니다. 구버전 또한 사용에는 문제가 없으나 정식 출시된 최신 버전을 사용하는 것이 제일 좋습니다. 설치 옵션의 경우 따로 건들 필요 없이 Install Now를 사용하여, pip 또한 함께 설치해줍니다.

 

3. Discord.py 설치

파이썬과 VS Code 모두 설치를 완료했다면 이제 Discord.py를 설치합니다. 파이썬으로 디스코드 봇을 만드는 라이브러리는 Pycord와 Discord.py가 존재합니다. Discord.py가 Pycord에 비해서는 조금 더 많은 정보를 쉽게 알 수 있기 때문에 Discord.py를 사용하려고 합니다.

 

실행한 VS Code 상단에서 Terminal - New Terminal 을 선택하거나 Ctrl + Shift + ` 를 통해 새 터미널을 열어줍니다.

py -3 -m pip install -U discord.py[voice]

 

Windows 환경에선 위 코드를 입력하면 되고, Mac 환경에선 아래 코드를 입력하면 됩니다.

python3 -m pip install -U discord.py[voice]

 

[voice] 는 만드려는 봇이 음성 기능을 사용할 수 있게 합니다. 음성 기능을 사용하지 않을 거라면 [voice]를 제거하고 입력하면 됩니다.

흔히 말하는 음악 재생 봇의 경우 음성 기능을 사용해야 하기 때문에 꼭 [voice]가 있어야합니다.

 

이런 문구가 표시됐다면 discord.py 설치가 끝났다는 뜻입니다. 이제 개발할 봇을 생성해보겠습니다.

4. 봇 생성

Discord.Dev 에 접속하여 새로운 Application을 만들어줍니다. 

New Application 버튼을 누르고 원하는 이름을 입력한 뒤에 약관 동의만 하면 봇을 생성할 수 있습니다.

 

생성 이후엔 이런 화면을 볼 수 있는데 여기서의 Name은 봇의 이름, DESCRIPTION은 봇의 설명, TAGS는 이 봇을 설명할 수 있는 단어입니다. 자유롭게 지정하여 봇을 꾸밀 수 있고 또한 프로필 사진을 추가하여 봇의 프로필 사진도 꾸며줄 수 있습니다. 

 

감사합니다.

+ Recent posts