본문 바로가기
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)
반응형