지원봇
윤지원 블로그
지원봇
전체 방문자
오늘
어제
  • 분류 전체보기 (5)
    • 기록 (4)
    • ETC (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Mimetype
  • MediaRecorder
  • Audio
  • javascript
  • React

최근 댓글

최근 글

티스토리

지원봇

윤지원 블로그

알림봇 제작을 위한 디스코드 웹훅과 구글 Apps Script 활용 가이드
ETC

알림봇 제작을 위한 디스코드 웹훅과 구글 Apps Script 활용 가이드

2023. 3. 4. 23:09

코드스테이츠 부트캠프 수강하는중에 출석체크를 자주 까먹어서
디스코드 webhook과 구글 Apps Script 이용해 알림봇을 만들어보려고 합니다


디스코드 웹훅 생성

먼저, 디스코드 웹훅을 생성해야 합니다. 디스코드 웹훅은 다양한 용도로 사용할 수 있는 URL입니다. 이 URL을 이용하여 알림을 보낼 수 있습니다.

알림봇을 만들고 싶은 채팅 채널의 편집버튼을 누릅니다.
알림봇을 만들고 싶은 채팅 채널의 편집버튼을 누릅니다.

 

‘웹후크 만들기’ 버튼 클릭

 

'웹후크URL 복사' 버튼을 눌러 URL을 복사한다


구글 Apps Script 생성

구글 Apps Script는 구글 서비스를 자동화하는 데 사용되는 스크립트 언어입니다. 이를 사용하여 디스코드 웹훅으로 메시지를 보내는 스크립트를 작성합니다. 예를 들어, 수업 시간을 추적하고, 수업 시작 10분 전에 알림을 보내도록 설정할 수 있습니다.

 

스프레드시트 바로가기

'내용 없음' 을 클릭하여 빈 스프레드시트를 생성해주세요.
'확장 프로그램' -> 'Apps Script' 버튼을 눌러주세요( 자동으로 Apps Script 화면으로 전환됩니다)


구글 Apps Script 코드 작성

제가 작성한 아래의 코드를 참고하여 Apps Script를 저장 합니다.

const url = '복사했던 디스코드 url 붙여넣기!!';

let msg = {
/*"avatar_url": "",*/
  "username": "알림봇",
  "content": "메세지"
};

//fetch를 이용해서 디스코드 url에 POST요청
function pushMessage(obj) {
   UrlFetchApp.fetch(url, {
      "method": "POST",
      "headers": {
        "Content-type": "application/json"
      },
      "payload": JSON.stringify(obj)
      });
}

//트리거 중복방지용으로 만든 시트를 특정 시간에 초기화 시킬 함수
function resetCells() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet.getRange('B1:B5').setValue('미완료')
}

//스프레드시트 해당 cell의 값을 검사, 트리거 중복방지용
function checkAlarms(cell) {
  let sheet = SpreadsheetApp.getActiveSpreadsheet();
  if(sheet.getRange(cell).getValue() === '완료') return false
  else if(sheet.getRange(cell).getValue() === '미완료'){
    sheet.getRange(cell).setValue('완료')
    return true
  }
}

const getTime = () => {
  const now = new Date()
  const hh = Number(now.getHours()) < 10? `0${now.getHours()}`:now.getHours()
  const mm = Number(now.getMinutes()) < 10? `0${now.getMinutes()}`:now.getMinutes()
  return `${hh}:${mm}`
}

//메인 기능
function App() {
   const now = new Date();
    if(now.getDay() > 0 && now.getDay() < 6)  { //월화수목금에만 알림 1,2,3,4,5
        switch (getTime()){
            case '08:30':
            msg = {...msg,'content' : `@everyone 여러분!! ${now.getMonth()+1}월 ${now.getDate()}일 오전 입실 시간입니다.\n🎯입실인정 08:30 ~ 09:10`}
            checkAlarms('B1')? pushMessage(msg) : false
            break;
            case '18:00':
            msg = {...msg,'content' : `@everyone 여러분!! ${now.getMonth()+1}월 ${now.getDate()}일 오후 퇴실 시간입니다.\n🏡퇴실인정 18:00 ~ 19:30`}
            checkAlarms('B2')? pushMessage(msg) : false
            break;
            case '09:55':
            msg = {...msg,'content' : `@everyone 여러분!! ${now.getMonth()+1}월 ${now.getDate()}일 오전 회의 시작 5분전 입니다.\n👹회의실에 입장해주세요~`}
            checkAlarms('B3')? pushMessage(msg) : false
            break;
            case '16:55':
            msg = {...msg,'content' : `@everyone 여러분!! ${now.getMonth()+1}월 ${now.getDate()}일 오후 회의 시작 5분전 입니다.\n🐷회의실에 입장해주세요~`}
            checkAlarms('B4')? pushMessage(msg) : false
            break;
        }
    }
}

 

 

코드 작성 후 '저장(디스크모양)' 버튼을 눌러 줍니다. 그 다음 테스트 할 함수(App)를 선택 후 '실행' 버튼을 눌러줍니다

 

'권한 검토'를 클릭해 줍니다(Apps Script 첫 실행 때 권한 설정이 필요합니다.)

 

스프레드시트를 만들때 로그인 했던 구글 계정을 선택해 주시면 됩니다
스프레드시트를 만들때 로그인 했던 구글 계정을 선택해 주시면 됩니다

 

'{본인프로젝트 이름}(으)로 이동(안전하지 않음)'을 클릭해줍니다

 

'허용' 버튼을 눌러줍니다.

❓해당 권한은 작성자와 관계가 없습니다. (본인이 본인한테 권한부여 하는것)

 

💡 여기까지 따라 오셨으면 90% 성공 입니다 !! 이어서 아래 트리거를 추가하여 특정 시간마다 함수를 작동 시켜주세요

Apps Script 프로젝트에 트리거 추가

Apps Script 프로젝트에 트리거를 추가하여 정기적으로 출석체크 시간을 확인하고, 회의 시작 5분 전에 메시지를 보내도록 설정할 수 있습니다.

좌측 메뉴에 시계모양의 '트리거' 버튼을 눌러주세요

 

우측 하단에 '트리거 추가' 버튼을 눌러주세요

 

이미지 처럼 셋팅 후 '저장' 버튼을 눌러주세요 (메인 기능)

 

우측 하단에 '트리거 추가' 버튼을 한번 더 눌러주세요
이미지 처럼 셋팅 후 '저장' 버튼을 눌러주세요 (중복방지 기능)


알림봇 테스트

알림봇이 정상적으로 작동하는지 확인하기 위해, 테스트를 진행해야 합니다. 이를 위해, 구글 스프레드시트에서 Apps Script 함수를 실행할 수 있습니다.

코드로 작성했던 시간에 메세지 전송(예전 캡쳐 이미지라 시간이 다릅니다)


추가 설명

 case '08:30': 
 msg = {...msg,'content' : `@everyone 여러분!! ${now.getMonth()+1}월 ${now.getDate()}일 오전 입실 시간입니다.\n🎯입실인정 08:30 ~ 09:10`}
 checkAlarms('B1')? pushMessage(msg) : false
 break;

  오전 08:30분에 ‘content’ 에 해당하는 메세지를 push 하고

  스프레드 시트 B1셀을 중복방지 용으로 사용합니다

//트리거 중복방지용으로 만든 시트를 특정 시간에 초기화 시킬 함수
function resetCells() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet.getRange('B1:B5').setValue('미완료')
}

  resetCells 함수가 자정(트리거)에 실행 되면 중복방지 값이 초기화 됩니다


마치며

이상으로, 구글 Apps Script 생성 방법에 대한 가이드를 마치겠습니다. 이제부터 여러분은 구글 앱과 상호작용하는 자동화된 스크립트를 만들 수 있게 되었습니다. 좋은 결과 있기를 기대합니다!

 

    지원봇
    지원봇

    티스토리툴바