※ 부제 : 자기가 있는 현장의 문제를 발견하고 풀어보는 미니 프로젝트

안녕하세요, 저희는 42vin(42 + marvin) 팀입니다! (gilee, yekim, hyeonsok)

슬랙봇 개발의 서막

바야흐로 4주 전.. 허광남 멘토님의 지도아래 슬랙봇을 뚝딱뚝딱 만들 팀이 구성됐습니다..!

저번 달 저희는 슬랙봇을 어떻게 부려먹을까 기대하며 프로젝트에 지원했습니다.

  1. 다른 카뎃은 어디 있을까? (평가 직전 유용할 것으로 추정)[완성]
  2. 내가 지원금을 받을 수 있을까? [완성]
  3. 등록된 과제로부터 몇일이 지났을까? [미완성]
  4. 기타 등등…

과제는 위와 같이 3주안에 저희가 원했던 기능을 목표로, 매주 2회 멘토님과 회의를 하고(맛있는 식사도 하고) 부족한 부분을 공부해나가는 방식으로 진행되었습니다. 지금부터 3주간에 과정과 구현 과정, 고민한 부분에 대해 적어보겠습니다!
(지도해주시고 항상 응원해주신 멘토님 감사합니다🤩)

슬랙봇 개발, 세상을 바꿀 수 있을지도(?)
: 토스의 슬랙봇 설계 카뎃을 서포트하는 42vin을 만들자만들자!

뚝딱뚝딱 슬랙봇과 소통하기

뚝딱뚝딱 슬랙봇 말시키기

슬랙 봇에는 아래와 같은 기능들이 있습니다.

저희가 가장 먼저 사용한 슬랙봇의 기능은 Webhook 방식으로, URL만으로 slack에 메세지를 전송할 수 있는 기능입니다.
하지만, 저희는 일방적으로 사용자에게 메세지를 전송하기 보다, 소통할 수 있는 로봇이 필요하잖아요?

뚝딱뚝딱 슬랙봇과 커뮤니케이션하기
(Event Subsciption)

따라서, 저희는 Event Subscriptions와 Slash Commands 기능을 사용했습니다!
먼저, Event Subscriptions는 채팅창에 입력된 단어에 대한 응답을 주는 방식입니다.

Event Subscription 예시

참고: slabs-slackbot 위키

뚝딱뚝딱 로봇과 커뮤니케이션하기
(Slash Commands)

Event Subscription 방식은 사용자 입장에서는 편리하지만, 채팅을 하다가 슬랙봇이 갑툭튀(?)하는 경우가 생길 수도 있기 때문에!(feat. Siri야..) Slash Commands 위주로 개발을 시작했습니다!

뚝딱뚝딱 로봇의 뇌 만들기

42 API 사용하기

42 API는 카뎃의 위치와 지원금 지급 기준 확인등 42 intra의 정보들을 활용하기 위해 필수적으로 지나야하는 코스입니다..! API 사용법은 멘토님께서 innovationacademy 깃에 공유해주신 42Seoul-info 레파지토리를 보며 공부했습니다!

innovationacademy-kr/42Seoul-info

처음에는 예시를 따라하며 passport.js를 이용하여 OAuth2.0을 사용하려고 했습니다. 하지만, 로그인 후에 Authorize 버튼을 눌러야지만 토큰을 받아올 수 있다는 문제가 생겼습니다.. 토큰을 받을 때마다 로그인을 할 수 없는데 말이죠..!

어떻게 해야하나 고민하며, jaeskim님에게 다짜고짜 찾아가서 방법을 물었습니다. (동료학습의 힘) 곧, 해결책이 client credential 모드를 쓰는 것! 이라는 얘기를 듣고, 다른 모듈을 찾아봤습니다!

client credential 모드를 사용한 방식은 …. 바로바로!!
‘axios’모듈과 ‘axios-oauth-client’모듈을 활용하는 것이었다! 이 후부터, 토큰을 받고난 후 부터는 원하는 기능들을 촤자작 붙여나갈 수 있겠다는 자신감이 모락모락!

Sequelize 사용하기

42vin에 기능을 추가하던 중, 다른 카뎃분들이 필요한 기능들을 모아둘 데이터 베이스가 있으면 편리하겠다고 생각했습니다.
(제안하기 전, 풀리퀘스트해볼까 고민하고 있는 당신은 킹갓제너럴엠페러마제스티골.. 카뎃!)

taehokim님의 세심하고 똑부러진 코드리뷰와 가르침 위에 ft_server, ft_service 때 배운 지식을 한스푼 얹어서 suggest 목록을 구현했습니다.

이제 비로소 여러분이 제안하는 기능들을 확인하며 구현할 수 있습니다!

주의: 구현 주기가 매우 늦어서 답답하시다면! 풀리퀘스트 해주세요!

그런 당신이 바로바로 킹갓제너럴엠페러마제스티골져스프레셔스뷰리풀하이클래스엘레강스럭셔리클래식지니어스원더풀러블리월드탑클래스 카뎃!

앞서 소개한 것처럼, 저희는 이미 다른 카뎃들의 도움을 받아가며 짧은 시간내에 원하는 기능을 구현할 수 있었습니다. 모두 함께 만들어나가요 42vin!!

현재까지 구현된 기능

현재는 Slash Commands를 이용해서 아래와 같은 기능들을 사용할 수 있습니다!


참고: slabs-slack 깃

우리 모두 다같이 42vin의 뇌를 채워보아요

이제 여러분과 함께 42vin의 vin(빈) 뇌를 채워가야합니다. 현재 계획하고 있는 기능들은 아래와 같고, 생각날 때마다 Projects에 추가할 예정입니다.

  • /bot suggest {건의할 내용(띄어쓰기 사용가능)}을 통해 어떤 기능을 추가해달라고 얘기해주시면, 틈나는대로 추가하겠습니다!
  • 추후에 모든 카뎃분들이 contribute 하실 수 있도록 템플릿에 만들 예정입니다! 템플릿에 맞추어 Pull requests를 해주시면 merge 하겠습니다!
  • github의 Actions와 jest를 공부하여, 푸쉬 후에 테스트와 배포까지 자동화할 예정입니다!

42vin 소환하기

  1. 42seoulcuckoo.slack.com 에서 42vin이 활동중입니다!
  2. 왼쪽 배너에 more(더보기)에서 Apps를 들어갑니다.
  3. 42vin을 클릭합니다.
  4. /bot help 부터 쳐보실까요?

소감

후.. 모든 준비는 끝났군. 이제 시작해볼까..??