디스코드 봇이 호스팅 환경에서 재시작 후에도 오프라인 상태로 남고, 로그에 app.py 특정 줄에서 오류가 발생하는 경우의 진단과 해결 절차를 정리한다. 디스호스트 등 호스팅 환경에서 발생하는 패키지 불일치와 설정 누락을 중점으로 다룬다.
증상
- 호스팅에서 재시작(Reboot) 후 봇이 오프라인 상태로 유지된다.
- 호스팅 로그에 파이썬 예외가 찍히며,
app.py의 3번째 줄(또는 초기 임포트 라인)에서 에러가 발생한다. - 로그에 설치된 라이브러리 정보(예:
py-cord 2.7.0) 또는ImportError/AttributeError같은 메시지가 보인다.
원인
- 코드가 특정 Discord 라이브러리(예:
discord.py2.x) 문법을 사용하도록 작성되어 있는데, 호스팅 환경에는 다른 구현체(예:py-cord 2.7.0)가 설치되어 있어 API 불일치로 예외가 발생한다. - 의존성 설치가 자동으로 되지 않아 필요한 패키지가 누락되었거나, 호스팅에서 콘솔이나 pip 실행 권한이 없어 설치가 반영되지 않았다.
- 봇 토큰이나 환경변수 미설정, 잘못된 시작 명령으로 프로세스가 정상 기동하지 않음.
해결 방법
1단계: 로그와 에러 메시지 확인
- 호스팅의 로그 탭을 열어 전체 트레이스백을 확인한다. 에러가
ImportError인지,AttributeError인지, 또는 다른 라인에서 나는지 반드시 확인한다. - 설치된 패키지 정보가 로그나 환경에서 노출되면 버전 정보를 적어둔다(예:
py-cord 2.7.0).
2단계: 코드와 설치 패키지 일치시키기
- 코드가
discord.py문법을 쓰면discord.py를 설치하거나, 설치된 구현체에 맞게 코드를 바꾼다. - 호환되는 최소 예제(명령형 봇, 메시지 컨텐츠 활성화):
# app.py (commands.Bot 방식, discord.py / py-cord 공통)
import os
import discord
from discord.ext import commands
TOKEN = os.environ.get("DISCORD_TOKEN") # 호스팅 환경에 DISCORD_TOKEN 설정 권장
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
print(f"Logged in as {bot.user}")
bot.run(TOKEN)
- 설치를 변경하려면 로컬에서 테스트 후 호스팅에 반영한다.
3단계: 의존성 명시 및 재배포
- 호스팅에서 pip 사용이 가능하면 패키지 설치:
# discord.py 설치 (discord.py 사용시)
python -m pip install --upgrade discord.py
# 또는 py-cord 특정 버전으로 고정
python -m pip install --upgrade py-cord==2.7.0
- 호스팅이 자동으로
requirements.txt를 읽는 경우 프로젝트 루트에 파일 생성:
# requirements.txt
py-cord==2.7.0
# 또는
discord.py==2.3.2
requirements.txt를 커밋 후 배포하면 호스팅이 의존성을 설치한다.
4단계: 시작 명령과 환경변수 확인
- 호스팅의 프로세스/서비스 시작 명령이
python app.py로 되어 있는지 확인한다. - 봇 토큰을 코드에 하드코딩하지 말고 환경변수(
DISCORD_TOKEN)로 설정하고, 호스팅 대시보드에서 해당 변수 값을 등록한다.
5단계: 콘솔 접근이 없을 때 대응
- 콘솔이 불가하면 위 변경사항을 로컬에서 반영해 커밋 및 배포한다(특히
requirements.txt와app.py수정). - 배포 후 로그를 통해 재시작 결과와 예외 출력을 확인한다.
마무리
디스코드 봇이 오프라인인 경우 대부분은 코드-라이브러리 불일치나 의존성 누락, 환경변수/시작 명령 문제다. 디스호스트 같은 호스팅에서 작업할 때는 requirements.txt로 의존성을 고정하고, 토큰을 환경변수로 설정한 뒤 로그를 통해 에러 라인을 확인하면 문제를 빠르게 해결할 수 있다.