Skip to content

Instantly share code, notes, and snippets.

@masartz
Last active March 18, 2022 02:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masartz/d8a52e19f03c0f71b261146eeb888c81 to your computer and use it in GitHub Desktop.
Save masartz/d8a52e19f03c0f71b261146eeb888c81 to your computer and use it in GitHub Desktop.
Restrict members & post violation to Slack
// Slackの Incoming webhooks の設定を済ませ、webhook URLを発行しておく
// ex: https://hooks.slack.com/services/AAAAA/BBBB/CCCC
const WEB_HOOK_URL = "";
// Slack通知時の設定
const SLACK_USER_NAME = 'bot user name';
const SLACK_ICON = ':hatching_chick:';
// 対象のコンテンツを選択: "document" or "spreadsheets"
const CONTENT_TYPE = "document";
// 対象のコンテンツのIDを設定
// https://docs.google.com/document/d/XXXXX <= XXXXX の部分
// or
// https://docs.google.com/spreadsheets/d/XXXXX <= XXXXX の部分
const CONTENT_ID = "";
// 許可するemail list
const ARROW_LIST = [
// "aaa@example.com",
// "bbb@example.com",
];
// ここが起点の関数、ここからスタートする
function restrict_user() {
let content = get_content();
// 編集者権限を持っているメアド一覧を取得
let editors = content.getEditors();
// 閲覧者権限を持っているメアド一覧を取得
let viewers = content.getViewers();
    
// 権限を持っている人をひとまとめの変数で管理
let users = editors.concat(viewers);
// 権限を持っている人が許可リストに入っているかを1人ずつチェックする
for (i = 0; i < users.length; i++) {
// 権限を持っている人のメアド情報を取得
let userEmail = users[i].getEmail();
// 該当のメアドが許可リストに入っていなければSlack通知
if (! ARROW_LIST.includes(userEmail)){
post_to_slack(userEmail);
}
}
}
// 対象がGoogle docかSpreadsheetかによって、対象(=コンテンツ)を選んで、そのオブジェクトを返す
function get_content() {
if (CONTENT_TYPE == "document") {
return DocumentApp.openById(CONTENT_ID);
} else if (CONTENT_TYPE == "spreadsheets") {
return SpreadsheetApp.openById(CONTENT_ID);
}
}
function post_to_slack(userEmail ) {
let jsonData ={
"username": SLACK_USER_NAME,
"icon_emoji": SLACK_ICON,
"text": Utilities.formatString("CAUTION %s is included into https://docs.google.com/%s/d/%s content",userEmail,CONTENT_TYPE,CONTENT_ID),
};
let payload = JSON.stringify(jsonData);
let options = {
"method": "post",
"contentType": "application/json",
"payload": payload
};
UrlFetchApp.fetch(WEB_HOOK_URL, options);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment