디스코드 메신저로 만드는 알림 봇 : 파이썬 함수 예제
디스코드 메신저는 카카오톡의 단톡방처럼 커뮤티니 도구로 널리 쓰이고 있습니다. 커뮤니티용으로 쓰임새가 많지만 개인용으로도 충분한 활용가치가 있습니다. 이번 포스팅의 목적은 나만을 위한 디스코드 메신저 알림 봇을 만드는 것입니다. 파이썬 함수로 만든 후 파이썬 프로그램을 실행시키면 메시지를 보내는 방법입니다.
글의 순서
디스코드 메신저
디스코드 메신저 알림 봇
디스코드 메신저 알림 봇 : 웹훅URL 이용, 메시지 보내기
디스코드 메신저 알림 봇 : 파이썬 함수 예제
디스코드 메신저
디스코드(Discord)는 카카오톡의 단톡방, 텔레그램의 단체 텔방과 비슷한 기능을 가진 실시간 메신저입니다. 디스코드는 채팅 또는 음성을 통해 구성원들과 소통할 수 있습니다. 단톡방은 비슷한 관심사를 가진 사람들을 위한 대화 공간인데, 비슷한 관심사를 가진 사람들이 모여있는 공동체를 영어로는 커뮤니티(community)라고 합니다.
디스코드는 커뮤니티 당 하나의 서버를 제공합니다. 서버 안에는 여러 개의 채널을 만들 수 있습니다. 디스코드 서버는 네이버 카페와 같은 개념이고, 디스코드 서버 내의 채널은 네이버 카페의 게시판과 같은 개념입니다.
디스코드 서버 내의 채널을 선택하면, 메시지를 입력할 수 있는 창이 나옵니다. 노란 느낌표 부분(#일반에 메시지 보내기)에 메시지를 입력하고 엔터를 누르면 메시지가 전송됩니다. 그러면 채팅 채널 내에 들어와 있는 회원(친구)들에게 메시지가 전송됩니다.
디스코드 메신저 알림 봇
원하는 조건이 되었을 때, 내게 자동으로 메시지를 보내줄 수 있도록 파이썬 코드를 이용하여 알림 봇을 만들어보겠습니다. 채팅 채널의 노란 느낌표 부분에 메시지를 입력하는 주체가 나나 친구가 아니라 로봇이 되는 것입니다.
파이썬 프로그래밍을 통해 미리 만들어둔 메시지를 자동으로 보낼 수 있습니다. 예를 들어 주식가격이라든가 거래량, 또는 기술적 분석과 관련한 특정 조건을 만족하고 있다는 것을 알려주는 메시지 말입니다. 궁극적 목표는 주식투자 자동화와 관련된 메시지가 자동 전송되도록 하는 것입니다만, 이번 포스팅에서는 파이썬 프로그래밍을 통해 디스코드 채널에 메시지를 보내는 방법까지만 정리해보겠습니다.
디스코드 메신저 알림 봇 : 파이썬 함수 예제
(1) 웹훅 URL 받기
지난 포스팅에서 디스코드 서버/채널, 그리고 디스코드 서버에 접속하기 위한 웹훅 URL을 만들었습니다. 채널에 파이썬 프로그래밍으로 메시지를 보내기 위해서는 채널 접속에 필요한 권한을 위임받아야 하는데, 웹훅 URL이 권한을 위임받을 수 있는 열쇠가 됩니다. 따라서 디스코드 웹훅 URL이 있으면 내 채팅창에 메시지를 보낼 수 있습니다.
(2) 파이썬 코드 : 로그인을 위한 config 파일 구성
전체 코드에 필요한 초기 설정을 주로 config라는 파일명으로 코딩합니다. 설정파일을 별도로 만드는 이유는 파이썬 프로그램의 크기가 커질 경우, 프로그램 자체를 보다 간결하게 하기 위해서입니다. 설정파일을 별도로 만든 경우, main 프로그램 파일에서 설정파일을 읽은 후 필요한 변수를 가져오는 작업이 필요합니다. 다음 절 ‘(3) 파이썬 코드 : 디스코드 채널에 메시지 보내기’에서 확인해 보시기 바랍니다.
참고자료에서는 config.yaml 이라는 파일로 저장했습니다. 여기서 yaml은 JSON과 호환되는 문서형식인데, JSON 보다 간결하고, 따옴표나 기호 등이 없어 사람이 읽거나 편집하기도 쉽습니다. 사람이 읽거나 편집하기 쉽기 때문에 프로그램 설정파일로 자주 사용됩니다. 파이썬에서 가장 유명한 yaml 라이브러리는 pyyaml 입니다.
1 2 |
#디스코드 웹훅 URL : 미리 복사해둔 웹훅URL 붙여넣기 DISCORD_WEBHOOK_URL: "복사해놓은웹훅URL주소" |
(3) 파이썬 코드 : 디스코드 채널에 메시지 보내기
(step1) config.yaml 파일 열어서 디스코드 웹훅 URL 가져오기
다른 프로그래밍 언어와 마찬가지로 파이썬에서도 파일을 읽고, 파일로 쓸 수 있습니다. 파일을 열면 닫아줘야 하는데, 닫는 작업을 놓칠 때가 있습니다. 열고 닫을 때 쓰는 명령어가 open(), close()입니다. with 문을 쓰면 close()를 생략할 수 있습니다.
참고자료에서는 yaml 패키지를 사용해서 필요한 변수 값을 간편하게 가져왔습니다. 아래는 설정파일 config.yaml을 with 문으로 열어 cfg라는 변수에 담아 놓은 후, 변수 cfg에서 필요한 변수 DISCORD_WEBHOOK_URL의 값을 가져오는 구문입니다.
1 2 3 |
with open('config.yaml', encoding='UTF-8') as f: cfg = yaml.load(f, Loader=yaml.FullLoader) DISCORD_WEBHOOK_URL = cfg['DISCORD_WEBHOOK_URL'] |
(step2) 메시지 보내기 : requests 패키지 이용
requests 패키지를 이용하여 디스코드에 메시지를 쉽게 보낼 수 있습니다. 파이썬에서 HTTP 통신이 필요할 때 requests라는 패키지를 주로 사용하는데, 서버가 제공하는 API에 접속할 때 특히 유용합니다. requests 패키지에는 get, post, put, delete 등의 모듈을 사용할 수 있습니다. 메시지를 보낼 때는 이 중 post 모듈을 사용합니다.
post() 함수는 특정 URL을 가진 서버에 데이터를 보낼 때 사용되는데, 아래의 형식을 갖춰줘야 합니다.
1 |
requests.post(url, data={key: value}, json={key: value}, args) |
requests 패키지의 post() 함수에 URL은 필수입니다. data는 우리가 보내고자 하는 데이터이며, 딕셔너리, 리스트, 튜플 등 다양한 데이터 형식이 모두 가능합니다. JSON 형식도 가능하다 정도로 하고 넘어가겠습니다.
아래는 딕셔너리 형태의 데이터를 보내는 requests.post 함수 예제입니다.
1 2 |
message = {'content':'디스코드 메시지 보냅니다.'} requests.post(DISCORD_WEBHOOK_URL, data=message) |
※ URL은 서버가 어디에 있는지를 나타내는데, ‘통신 규칙://인터넷 호스트 주소/경로 이름’으로 구성됩니다. https://coffee4m.com/ 를 예로 들어보면, https는 인터넷에서 서로 다른 컴퓨터끼리 데이터를 주고 받기 위한 통신 규약이며, coffee4m.com은 도메인 이름입니다. 도메인 이름 대신 2~3자리 숫자의 조합으로 만들어진 IP 주소를 사용하기도 합니다.
(4) 디스코드 메신저 알림 로봇 : 파이썬 코드
이번 포스팅에서 만든 디스코드 메신저 알림 로봇 파일을 실습코드에 나타내었습니다. 디스코드 웹훅 URL을 복사해서 붙여넣으시면 알림과 함께 디스코드 메시지 보냅니다’라는 메시지가 날아 옵니다.
1 |
DISCORD_WEBHOOK_URL: "디스코드 웹훅 URL 붙여넣을 곳" |
1 2 3 4 5 6 7 8 |
import requests import yaml with open('config.yaml', encoding='UTF-8') as f: config = yaml.load(f, Loader=yaml.FullLoader) DISCORD_WEBHOOK_URL = config['DISCORD_WEBHOOK_URL'] message = {'content':'디스코드 메시지 보냅니다.'} requests.post(DISCORD_WEBHOOK_URL, data=message) |
디스코드 메신저 알림 봇 : 파이썬 함수 예제
특정 조건이 되었을 때, 반복적으로 메시지를 보내려면 파이썬 함수를 이용하는 것이 간편한 방법입니다. 실습코드 3은 실습코드2의 main.py에서 메시지 보내기 부분을 함수화한 것입니다. 함수 이름은 send_message입니다.
1 2 3 4 5 6 7 8 9 10 11 |
import requests import yaml with open('config.yaml', encoding='UTF-8') as f: config = yaml.load(f, Loader=yaml.FullLoader) DISCORD_WEBHOOK_URL = config['DISCORD_WEBHOOK_URL'] def send_message(message): requests.post(DISCORD_WEBHOOK_URL, data=message) message = {'content':'디스코드 메시지 보냅니다.'} send_message(message) |
마치며 …
디스코드 메신저는 카카오톡의 단톡방처럼 커뮤티니 도구로 널리 쓰이고 있습니다. 커뮤니티용으로 쓰임새가 많지만 개인용으로도 충분한 활용가치가 있습니다. 이번 포스팅에서는 나만을 위한 디스코드 메신저를 만들어 보았습니다.
디스코드 메신저 알림 로봇의 기본 틀을 아래와 같이 정리할 수 있습니다.
(1) 디스코드 웹훅 URL 받아 복사하기
(2) 로그인을 위한 config 파일 구성 : 웹훅URL 붙여넣기
(3) request.post()로 디스코드 채널에 메시지 보내기
(4) 메시지 전송 함수 만들기
함께 참고하면 더 좋은 글 :
1. 디스코드 알림 봇 파이썬 코드
2. 디스코드 메신저로 만드는 알림 봇 : 웹훅URL/
3. 디스코드 알림 봇 : 비트코인 실시간 가격 메신저
4. API와 파이썬 데이터 분석
5. 파이썬 프로그래밍 시작 (14) 패키지, 모듈
6. 파이썬 프로그래밍 시작 (3) 파이썬 함수 실습
7. 파이썬 프로그래밍 시작 (5) 연습문제 : 함수 만들기
8. 파이썬 프로그래밍 시작 (10) 자료구조(Data Structure) : 딕셔너리
참고자료
조코딩 JoCoding, 누구나 쉽게 주식 투자 자동화 – 배경지식 없이 20분만에 똑똑한 국내, 해외 자동매매 시스템 완성