반응형

Discord는 2015년 Jason Citron과 Stanislav Vishnevskiy가 게이머들이 서로 소통할 수 있는 플랫폼으로 시작했습니다. Discord의 기본 아이디어는 Skype 나 TeamSpeak 같은 플랫폼보다 더 안정적이고 음성, 채팅, 화상 통화가 가능한 사용자 친화적인 플랫폼을 만드는 것이었습니다.

처음에 소규모 게임 그룹을 위한 도구로 사용되었지만 빠르게 인기를 얻었고 대규모 게임 커뮤니티와 비게임 커뮤니티까지 포함할 수 있도록 확장되었습니다. 음성 채팅과 커뮤니티 구축에 중점을 둔 Discord는 매우 심플하고 다양한 설정이 가능한 인터페이스로 사용자들에게 어필했고 이후 수년에 걸쳐 비디오 채팅, 화면 공유, 추가 장치 및 플랫폼 지원을 포함한 새로운 기능과 발생되는 문제점을 빠르게 개선해 나아갔습니다.

2021년 Discord는 전 세계적으로 1억 5천만 명 이상의 사용자를 보유한 최대 온라인 커뮤니케이션 플랫폼이 되었습니다. 게임 채널을 넘어 음악, 교육, 사회 활동에 이르기까지 광범위한 커뮤니티로 진화하였고 2021년에는 회사 가치를 150억 달러로 평가받았다고 합니다.

Discord는 Windows, Andorid, iOS, Linux, MacOS 등 다양한 환경을 지원하며 Discord Bot을 이용해 많은 기능을 추가할 수 있도록 지원하고 있습니다. Discord Bot을 연결하고 채널에 메시지를 전송하는 Python 프로그램에 대해 설명드리도록 하겠습니다.


# Discord 서버 설정

Discord 사이트로 이동하여 [ Open Discord ]를 클릭합니다. 만약 가입이 필요하다면 가입 후 진행하시면 됩니다. Discord는 웹브라우저에서도 사용이 가능하며 앱 모바일이나 데스크톱 앱 다운로드 후 이용이 가능합니다. 

Loding Discord

클릭하면 로딩 이후 Discord 이용이 가능합니다.

Discord는 친구나 커뮤니티를 위한 공간을 만들 수 있는데 이 공간을 서버라고 합니다. 왼쪽에 있는 열이 서버 목록입니다. [ + ] 버튼을 눌러 신규 서버를 추가하도록 하겠습니다. (사용자는 최대 100개의 Discord 서버에 가입하거나 서버를 생성할 수 있습니다.)

"직접 만들기" > "나와 친구들을 위한 서버"로 선택합니다.

서버 이름 입력 후 [ 만들기 ]를 클릭합니다. 이렇게 하면 서버 생성까지 완료가 되었습니다. 왼쪽 서버 목록에서 생성한 서버를 확인하실 수 있습니다. 

# 봇(Bot) 생성

 Discord 개발자 포털로 접속합니다. 우측 상단에 [ New Application ]을 클릭합니다.

생성할 Application 이름을 입력하고 [ Create ]를 클릭합니다.

Application이 생성되면 위와 같은 페이지로 이동합니다. 좌측 메뉴에서 Bot을 클릭한 후 [ Add Bot ]을 클릭합니다.

[ Yes, do it! ]을 클릭하고 Bot을 추가합니다.

# 서버와 Bot 연결

좌측에서 OAuth2 > URL Generator를 클릭하고 SCOPE에서는 "bot"을 체크합니다. BOT PERMISSIONS에서는 "Administrator"를 체크합니다. 

하단에 생성된 URL을 [ Copy ] 합니다.

Copy 한 URL을 브라우저에 붙여 넣고 해당 주소로 이동하면 Bot과 연결하는 안내 창이 활성화됩니다. [ 계속하기 ], [ 승인 ]을 클릭하여 서버와 Bot의 연결을 합니다.

연결이 완료되었습니다.


간단히 Python을 이용하여 Discord Channel로 메시지를 보내는 예제를 수행해 보록 하겠습니다.

# Bot TOKEN 확인

Discord Bot TOKEN은 Bot에 할당되는 고유 식별자입니다. Bot이 동작하고 Discord API와 통신하는 데 필요합니다. Discord 개발자 포털에서 Bot을 선택하면 Build-A-Bot 영역에서 TOKEN을 확인하실 수 있습니다.

더보기

보안상의 이유로 TOKEN은 생성될 때 한 번만 볼 수 있습니다. TOKEN을 잊어버린 경우 [ Reset Token ]을 눌러 새로운 TOKEN을 생성하시기 바랍니다. Bot TOKEN은 Bot의 기능에 대한 전체 액세스 권한과 Discord 서버에서 작업을 수행할 수 있는 기능을 제공하므로 누구와도 공유하지 않고 비밀로 유지해야 합니다.

discord.errors.LoginFailure: Improper token has been passed.

만약 Python 으로 discord와 관련하여 수행 시 위와 같은 오류가 발생했다면 TOKEN이 만료되었으니 새로운 TOKEN으로 대체하시기 바랍니다.

[ Copy ]를 눌러서 복사해 놓습니다.

# Privileged Gateway Intents 권한 설정


Bot이 메시지 콘텐츠를 수신하기 위해 권한 설정이 필요합니다. Privileged Gateway Intents 영역에 MESSAGE CONTENT INTENT를 활성화하고 [ Save Changes ]를 클릭합니다.

더보기

Discord Privileged Gateway Intents는 Bot과 Application이 특정 민감한 데이터 및 기능에 액세스 할 수 있도록 허용하는 권한 시스템입니다. Gateway Intents 시스템은 2018년 Discord에서 도입했으며  Bot과 Application에서 명시적으로 요청하지 않는 한 특정 데이터 및 이벤트에 대한 액세스를 제한하여 서버 성능을 개선하고 사용자 개인 정보를 보호하도록 설계되었습니다.

Gateway Intent에는 "privileged"과 "unprivileged" 두 가지 유형이 있습니다. privileged에는 서버 구성원 존재 및 구성원 데이터가 포함되며 unprivileged에는 비구성원 데이터 및 이벤트가 포함됩니다. 기본적으로 Discord Bot은 privileged에 액세스 할 수 없으며 Discord 개발자 포털을 통해 명시적으로 액세스를 요청해야 가능합니다. 

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.

만약 위와 같은 오류 메시지가 나왔다면 권한 설정이 필요합니다.

# discord 패키지 설치

pip를 이용하여 discord 패키지 설치합니다.

pip install discord

Discord Channel에 "Hello World" 메시지를 전송하는 코드입니다. TOKEN은 위에서 복사한 TOKEN을 입력하시면 됩니다. 채널 ID를 확인하는 방법을 보시고 CHANNEL_ID에 원하는 채널의 ID를 확인하시어 붙여 넣으시면 됩니다.

import discord

TOKEN = '<TOKEN>'
CHANNEL_ID = '<CHANNEL ID>'


class MyClient(discord.Client):
    async def on_ready(self):
        channel = self.get_channel(int(CHANNEL_ID))
        await channel.send('Hello World')


intents = discord.Intents.default()
intents.message_content = True
client = MyClient(intents=intents)
client.run(TOKEN)

다음에는 응답이 가능한 Bot을 구현하는 방법에 대해 설명드리도록 하겠습니다.

반응형