바로 할 수 있다! Java100개 노크를 Slack에 자동 게시하기Bot

소개



요 전날 JJUG CCC 2016 Fall에 참가했습니다.
그 가운데 자바 100개 노크 가 소개되고 있어 재미있을 것 같기 때문에 사내에서도 해보자는 이야기가 되었습니다.
Slack에 문제를 자동 투고하는 Bot을 스프레드 시트와 GAS로 만들어 보았으므로, 좋으면 참고로 해 보세요.

절차



1. 문제 번호를 저장하는 스프레드시트 만들기





2. 스크립트 편집기 열기



스프레드시트 메뉴에서 도구 > 스크립트 편집기를 선택합니다.

3.GAS에 SlackApp 라이브러리를 도입한다



스크립트 편집기 메뉴에서 자원 → 라이브러리를 선택하고 다음 Library Key를 입력하십시오.

SlackApp의 Library Key → M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO

4. 슬랙 토큰 발행



이 기사 를 참고로 Slack 토큰을 발행합니다.

5. 코드 작성



스크립트 편집기에 다음 코드를 붙여넣습니다.
TOKEN 상수는 위에서 얻은 토큰으로 대체하십시오.
var URL = "https://github.com/JustSystems/java-100practices/tree/master/contents/";
var TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 取得したトークンを貼り付け

function main() {
  // 平日のみ投稿
  var today = new Date();
  if(isJapaneseHoliday(today) || today.getDay() == 0 ||today.getDay() == 6){return;} 

  var qNumRange = SpreadsheetApp.getActiveSheet().getRange(1, 2);
  var qNum = qNumRange.getValue();
  postSlackMessage(qNum);

  // 問題インクリメント
  qNum++;
  if(qNum > 100){ qNum = 1;}
  qNumRange.setValue(qNum);
}


function postSlackMessage(qNum) {
  var slackApp = SlackApp.create(TOKEN); //SlackApp インスタンスの取得

  var options = {
    channelId: "#java100knock",
    userName: "Java100本ノックBot",
    message: "今日の問題はこちら!\n" + 
             URL + ('000' + qNum).slice( -3 ) // 問題番号0埋め         
  };

  slackApp.postMessage(options.channelId, options.message, {username: options.userName});
}

function isJapaneseHoliday(date) {
  var year = date.getFullYear();
  var month = date.getMonth();
  var day = date.getDate();

  var startDate = new Date();
  startDate.setFullYear(year, month-1, day);
  startDate.setHours(0, 0, 0, 0);

  var endDate = new Date();
  endDate.setFullYear(year, month-1, day);
  endDate.setHours(23, 59, 59, 999);

  var cal = CalendarApp.getCalendarById("ja.japanese#[email protected]");
  var holidays =  cal.getEvents(startDate, endDate);

  return holidays.length != 0;
}

이 상태에서 main 메소드를 실행하면 Slack의 java100knock 채널에 문제가 게시됩니다.

6. 시작 트리거 설정



스크립트 편집기의 트리거 아이콘 (시계 표시)에서 트리거를 설정합니다.


이 설정으로 매일 아침 8~9시에 문제가 자동 게시됩니다. (소스 내에서 평일에만 게시하도록 제어하고 있습니다)

게시된 문제는 다음과 같이 느껴집니다.


참고


  • Slack Bot을 GAS로 좋은 느낌으로 쓰는 라이브러리를 만들었습니다.
  • 초보자가 GAS로 Slack Bot을 만들려고
  • GoogleAppsScript로 일본 공휴일 받기
  • 좋은 웹페이지 즐겨찾기