바로 할 수 있다! 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시에 문제가 자동 게시됩니다. (소스 내에서 평일에만 게시하도록 제어하고 있습니다)
게시된 문제는 다음과 같이 느껴집니다.
참고
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;
}
Reference
이 문제에 관하여(바로 할 수 있다! Java100개 노크를 Slack에 자동 게시하기Bot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nesheep5/items/c6a50554199a910af578텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)