본문 바로가기
Discord/Discord Bot Python

디스코드 봇 개발 시 Error 관련

by 깐테 2023. 5. 30.

Error Solution

1. AttributeError가 발생하는 경우

더보기
  1. 디스코드 버전 업데이트 및 필요 모듈 설치
  2. CMD 관리자 권한 실행 → pip install -U git+https://github.com/Rapptz/discord.py
  3. pip install py-cord, discord-ui
  4. 아래 사이트에서 Bot → Intents 3개 모두 체크
Discord Developer Portal - API Docs for Bots and Developers
 

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

 

 

2. Discord Module Error가 발생하는 경우

더보기

디스코드 모듈 설치

- 만약 Discord 관련 모듈에서 에러가 발생한다면

1. `pip install discord.py[voice]`
→ 음성 채널을 사용하는 봇에서 해당 모듈이 설치되어 있지 않을 경우 오류 발생
2. `pip install discord-ui, py-cord`
→ UI와 관련된 디스코드 모듈을 사용하는 경우 오류가 발생할 수 있음. 해당 모듈을 설치하여 해결
3. `pip install PyNaCl`
→ 해당 모듈을 설치하지 않으면 대부분의 Discord 코드가 실행되지 않을 수 있음.

 

 

3. **TypeError: init() missing 1 required ~오류가 발생하는 경우**

더보기

- 시작 클래스 생성 또는 intents 추가

TypeError: init() missing 1 required keyword-only argument: 'intents' →

  • 초기화 과정에서 intents를 읽지 못해 발생하는 오류.
  • 따라서 다음과 같이 클래스를 만들어 주거나 intents를 직접 추가해주면 된다.
# 잘못된 코드
bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
	print('{} 봇 실행 ~')



''' 아래 코드와 같이 수정한다.'''
bot = commands.Bot(intents=discord.Intents.default(), command_prefix='!')



''' 또는 아래와 같이 수정 '''
class Bot(commands.Bot):
    def __init__(self):
        intents = discord.Intents.default()
        intents.message_content = True

        super().__init__(command_prefix = commands.when_mentioned_or('!'), intents=intents)

    # on_ready는 시작할 때 한번만 실행.
    async def on_ready(self):
        print('Login...')
        print(f'{client.user}에 로그인하였습니다.')
        print(f'ID: {client.user.name}')
        await client.change_presence(status=discord.Status.online, activity=discord.Game('VS Code로 개발'))

 

4. 음악 봇 관련 실행 시 ERROR:name 관련 오류가 발생하는 경우

  • 더보기
    YTDL → yt_dlp 설치
    • 유튜브 음악 재생 관련해서 내부적인 동작 코드가 수정된 것으로 확인됨.
    • 기존 YTDL 소스와 유사하게 동작하는 yt_dlp를 설치하여 동작 확인
    pip install yt_dlp
    
  • 소스코드의 기존 import가 youtube_dl로 설정되어 있는 것을 yt_dlp로 수정

 

 

5. Token을 찾을 수 없다고 출력하는 경우

  • 작성된 코드에서 Token은 파일을 따로 만들어 분리해두었기 때문에 찾을 수 없다고 뜨는 것이 정상.
  • 파일 이름: dico_token.py(파일명은 사용자 마음대로 설정)
# dico_token.py
Token="토큰을 복사하여 이곳에 넣어주세요"
  • 사용 시, 아래와 같이 사용한다.
# import 시, dico_token.py 파일이 작성하려는 소스코드와 같은 경로에 위치해야 한다.
from dico_token import Token

```
코드 작성
```

bot.run(Token)

 


 

** 해당 코드에서 사용한 Python 버전은 3.12.5 입니다.

Q: 봇을 실행시키고 명령어는 동작하는데, 봇이 아무 반응이 없어요(소리가 나오지 않아요)

A: 
1. 디스코드 개발자 포탈의 OAuth2 설정에서 bot의 권한이 Admin이거나, bot 권한 중 음성과 text 권한을 허용해주셔야 합니다.
2. 디스코드 개발자 포탈의 Privileged Gateway Intents 설정의 3가지 권한이 모두 허용되어 있어야 합니다.
3. 디스코드의 사용자 설정 - 음성 및 오디오 - 출력 장치의 설정이 사용자가 설정한 스피커로 설정되어 있는지 확인해주셔야 합니다.
4. IDE(VSCode) 터미널에서 오류 메시지가 출력되지는 않았는지 확인하셔야 합니다.

5. 디스코드 봇이 들어오고 초록색으로 표시되는 경우, !volume 50 명령어를 입력하셔서 볼륨 설정이 잘못되지 않았는지 확인하셔야 합니다.

6. 디스코드 서버 - 봇 우클릭 - 봇 설정에서 서버 마이크 음소거 및 음량이 최소화되지는 않았는지 확인해주셔야 합니다.

7. 윈도우에서 cmd를 열어 ffmpeg -version 명령어를 입력하시고 라이브러리 정보가 출력되는지 확인 부탁드립니다. 만약 라이브러리 정보가 출력되지 않는다면 파이썬 및 ffmpeg 환경 변수를 다시 설정해야 합니다.

 

위 방법 모두 동작하지 않는다면 python 버전을 최신(3.12) 버전으로 재설치 후 라이브러리를 pip install 해주시기 바랍니다.

pip install discord[voice]
pip install discord.py
pip install yt-dlp
pip install PyNaCl

 

파이썬 재설치 후 ffmpeg를 파이썬이 설치된 경로에 넣어주시기 바랍니다.

 

 

참조: VSCode에서 파이썬 버전 설정 방법

1. VSCode 우측 하단 파이썬 버전 클릭

 

2. 파이썬 버전을 3.12로 설정

 

Python 3.9 버전은 실행 불가 확인. 최신 버전의 파이썬 사용을 권장합니다. 

 

 

Q: TypeError가 발생해요.

A: 오류 메시지가 출력되는 부분에서 잘못 작성한 코드 또는 전체 코드를 빠뜨린 부분이 없는지 확인 부탁드립니다.

 

Q: 음악 재생이 원활하지 않거나 재생하는 데 시간이 걸려요.

A: 노트북과 같은 무선 네트워크 환경 등 네트워크가 원활하지 않은 환경에서 코드 실행 시 음악의 앞 부분이 잘려서 출력되는 현상 또는 음악이 밀리는 현상이 발생할 수 있습니다. 네트워크 환경이 원활한 상태에서 코드를 실행하시길 권장드립니다.

또는 ffmpeg_options를 아래와 같이 설정해보시기 바랍니다.

FFMPEG_OPTIONS = {
    'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 -nostdin',
    'options':'-vn -preset ultrafast -ar 48000 -ac 2 -b:a 192k'
}

 

Q: dico_token이라는 파일이 없다고 떠요

A: 

1. dico_token.py라는 이름으로 파일을 만들어줍니다.(파일 이름은 사용자 마음대로 지정하셔도 됩니다.)

 

2. 디스코드 개발자 포털 - Settings - Bot - Reset Token 버튼을 클릭하여 토큰을 발급받아 복사합니다.

 

3. 발급받아 복사한 토큰을 아까 만들어 두었던 파일에 붙여넣기 합니다.

 

 

기타 오류 사항은 아래 페이지를 확인해주시기 바랍니다.

반응형