개발 강좌/기타 강좌

Discord Bot Gateway Intent란?

건유1019 2020. 11. 21. 14:55

#본 내용의 일부는 discord.py 기준으로 작성했습니다. 그러나 discord.js, JDA 등 타 언어를 사용하는 디스코드 봇들도 해당사항이니 참고해주시기 바랍니다.

여러분들은 Whitelist Gateway Intent에 대해 아시나요? Whitelist Gateway Intent란? 디스코드 봇 개발자 인증제도와 동시에 같이 도입된 제도로 실질적을 디스코드 API v8부터 적용되었습니다.

참고로, discord.py 1.5 버전, discord.js v12 버전 이상 일경우 디스코드 API v8를 사용합니다. 비록 2020년 초반부터 시행한 제도지만 실질적으로 알려진 계기는 10월 27일 디스코드 API v6 이하 버전의 일부 기능을 차단함으로써 많은 개발자들이 알게 된 기능입니다.

이번 시간에는 해당 Gateway Intent에 대해 서술해보고자 작성하였습니다.

우선 게이트웨이 인텐트가 왜 10월 27일부터 많은 개발자가 알게 되었느냐 입니다.

일단 (#)에도 작성되어 있듯이, 10월 27일부터 디스코드 API v8 버전 아래의 버전을 사용하는 모든 API에도 해당 Whitelist Gateway Intent가 도입되었습니다. 이는 이하 버전에도 해당 제도를 사용하지 않으면 디스코드 봇들이 정상적으로 작동하지 않는다는 것입니다.

실제로 제 디스코드 봇에도 영향을 끼쳤고 대표적으로 유저 정보를 불러오는 서비스부터 차질이 생기기 시작했습니다.

(좌) 정상 작동 (우) 비정상 작동

 

우측 사진은 보시면 오프라인이라고 표기되어 있지만, 실제로 저는 좌측 사진과 같은 상황에서 촬영한 것입니다.

(당시 정상 작동할 때와 비정상할 때 따로따로 촬영했습니다.)

사실 위 기능을 해결하는 방법은 간단하게 해결할 수 있습니다.

우선 https://discord.com/developers/applications 에 접속합니다.

본인의 디스코드 봇을 클릭 후 좌측 SETTINGS 메뉴바에 Bot 이동 후, Privileged Gateway Intents 체크 메뉴를 활성화하시면 됩니다.

그전에 활성화하기 전 위 2가지 용도를 알려드리고자 합니다.

• Presence Intent의 용도는 사용자의 상태(상태 메시지), 정보 값을 불러올 수 있습니다.

• Member Intent의 용도는 사용자가 서버에 접속한 유무와 서버 멤버 목록을 불러올 수 있습니다.

사실 둘 다 활성화하는 것을 권장합니다.


discord.py의 기준 추가적으로 작업이 필요합니다!

파이썬(discord.py) 기반으로 작성했을 경우 코드에도 인텐트를 추가적으로 활성화해주어야 합니다.

import discord
intents = discord.Intents(messages=True, guilds=True) #괄호 안에는 활성화할 인텐트를 작성해야함.
#혹은
intents = discord.Intents.default()
intents.typing = False
intents.presences = False

그리고 intent 값은 discord.ext(bot) 혹은 discord client를 사용해도 () 안에 넣어주시면 됩니다.

 

intents.default()를 하시면 기본적으로 필요한 Intents가 포함됩니다. 그러나 직접 지정하실 경우 전부다 하나하나 직접 지정하셔야 하기 때문에 discord.Intents.default()를 통하여 먼저 intents 기본 값을 넣으시기 바랍니다.

import discord
client = discord.Client(intents=intents)
#혹은
from discord.ext import commands
bot = commands.Bot(command_prefix='!', intents=intents)

인텐트를 설정할 때, 괄호 안에 들어가야 할 값은 (#)을 참고해주시는 것이 편한 실 것입니다.


Q. 만약에 저는 체크 바를 클릭할 수 없습니다.

A. 인증됐을 경우에 인텐트가 활성화되어 있지 않다면 상당한 귀찮음이 따라오는 길을 거쳐야 합니다.저 같은 경우 제가 운영하는 디스코드 봇 두 마리 둘 다 인증 완료 혹은 인증 심의를 거치는 중입니다.

이 경우 디스코드에게 문의해야 하며 한국어로 작성해도 개발팀으로 보내주는 편이니 번역기를 굳이 사용 안 하셔도 되지만, 영어로 작성해서 보내는 것을 권장하고 있습니다.

만약에 문의할 때 아래의 정보를 작성하여서 디스코드 지원센터에 보내주시면 검토 후 디스코드 측에서 활성화해줍니다.

• 디스코드 봇의 ID

• 화이트리스트 액세스 권한을 얻으려는 목적

• 이 인텐트가 필요한 기능에 대한 설명

• 이 기능이 작동하고 있는 화면의 스크린샷 또는 동영상 (사용자에게 이것이 보이지 않는 경우에는 관련된 코드 스니펫을 첨부)


이상으로 게이트웨이 인텐트에 대해 서술해보았습니다. 긴 글을 읽어주신 여러분들 감사드립니다.

<- 참고자료 ->

https://discord.com/developers/docs/topics/gateway#privileged-intents (디스코드 개발자 센터에 올라온 인텐트 서술)

https://support-dev.discord.com/hc/en-us/articles/360056426994 (Q&A에 올라온 인텐트 업데이트)

https://discordjs.guide/popular-topics/intents.html (discord.js 최근 인텐트 업데이트에 대한 서술)

https://discordpy.readthedocs.io/en/latest/intents.html (discord.py 최근 인텐트 업데이트에 대한 서술)

https://discordpy.readthedocs.io/en/latest/api.html#intents (discord.py 인텐트 설정에 대한 서술)