본문 바로가기

개발일지/디스코드 봇

디스코드 봇 개발 일지 2022-12-27

...갑자기 왜?

 

친구끼리 쓰는 디코방에서 뻘짓을 하는데 갑자기 뭐 봇 테스트하냐고 물었다.

 

그냥 수동으로 하는 뻘짓이었는데 물어봐서 당황은 했는데, 뭔가 생각보다 재밌지 않을까 하는 생각이 들었다.

 

얼마나 많이 할지는 모르겠는데 일단 생각하기 전에 바로 시작을 해버렸다.

 

시작은 반이니까

 

 


 

 

* 참고 사이트 (기본 예시 코드를 포함)

https://scvtwo.tistory.m/196

 

디스코드 봇 만들기(1) - 봇생성

안녕하세요. 디스코드 봇을 만드는 법에 대해 알아보도록 하겠습니다. 일단 디스코드 사이트로 들어갑니다. https://discord.com/ Discord | Your Place to Talk and Hang Out Discord is the easiest way to talk over voice, vi

scvtwo.tistory.com

일단 시작을 이 분의 블로그 글을 바탕으로 하기로 했다.

 

2번 글까지 참고를 했다.

 

참고한 내용을 여기에 2번 적는 것은 불필요하다고 생각이 들었다.

 

일단은 그대로 따라서 한 것이기 때문.

 

혹시나 내 글들을 따라 개발한다면, 이 사이트도 방문하여 기본 코드를 확인하기를 추천한다.

 

 

참고로 봇을 실행하기 위해서는 아래의 코드를 함수 선언 이후 맨 아래(추천 위치, 돌아가기만 하면 어디든 상관 X)에

 

다음 코드를 넣어주면 된다.

 

bot.run('디스코드 봇 토큰값')

 

문제점 (해결 완료)

 

대충 이해하기로는 일종의 Intent가 필요하다는 이야기가 나온다.

 

검색해보니 (안드로이드에서) 앱 컴포넌트 사이의 정보 전달을 수행한다고 하는데,

 

같은 의미인가는 귀찮아서 일단은 더 안 찾아보기로 했다.

 

그래서 위 사이트만 참고하면

 

 

Traceback (most recent call last):
  File "C:/Users/USER/Desktop/디스코드 봇/MyBot.py", line 4, in <module>
    bot = commands.Bot(command_prefix=':')
TypeError: BotBase.__init__() missing 1 required keyword-only argument: 'intents'

 

 

다음과 같이 "intents"에 대한 argument가 더 필요하다고 한다.

 

이는 금방 해결됐는데,

 

 

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

 

 

다음과 같이 "intents"를 추가해주자.

 

나만의 봇을 만드려고 참고한 코드에서 매우 약간 수정했으니, 헷갈리지 않았으면 좋겠다.

 

그리고 나면, 로그인을 시도하려는 것이 보이는데......

 

 

Traceback (most recent call last):
  File "C:/Users/USER/Desktop/디스코드 봇/MyBot.py", line 14, in <module>
    bot.run('MTA1Njk0MTQ4OTQxMTg3MDc4MQ.GU0psb.JU16jYhMxBEvxET5WTgkg68d0e_N-2XYFqE_f0')
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 828, in run
    asyncio.run(runner())
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 649, in run_until_complete
    return future.result()
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 817, in runner
    await self.start(token, reconnect=reconnect)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 746, in start
    await self.connect(reconnect=reconnect)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 672, in connect
    raise PrivilegedIntentsRequired(exc.shard_id) from None
discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.

 

 

바로 또다른 오류가 뜬다.

 

대충 "Privileged Intents"가 필요하니 오류 메시지에 뜬 도메인 참고해서 그것들을 활성화하라는 뜻이다.

 

 

도메인 타고 Discord Developer Portal로 들어가서 Applications → Bot을 누르고 좀 내려보면

 

 

여기 보이는 것들을 일단은 다 활성화해주자

 

 

Privileged Intents에 대한 것들이 있으니, 활성화를 해주고 저장하자.

 

저장 후에는 토큰을 다시 받고 코드를 다시 돌려보자.

 

 

 

테스트 함수 이름을 hello가 아닌 test로 바꿨다는 것을 2번 잊은 모습이다.

 

 

봇이 온라인 상태가 되고 명령도 잘 듣는 것을 확인하였다.

 

만세! 명령어나 기능 추가는 다음에 해야겠다.

728x90