0
1

More than 3 years have passed since last update.

ランチメンバーをランダムでいい感じに選ぶGASスクリプト

Posted at

スクリーンショット 2020-12-28 2.10.22.png

以下のようなURLをクリックするだけで、規定の配列から何人か選んでくれる。

https://script.google.com/macros/s/XXXXX-XXXX/exec
https://script.google.com/macros/s/XXXXX-XXXX/exec?num=2
https://script.google.com/macros/s/XXXXX-XXXX/exec?num=3
https://script.google.com/macros/s/XXXXX-XXXX/exec?num=4

以下のようなスクリプトをGASにいれて、Webアプリケーションとして公開したらOK

function doGet(e) {
  if(!isOurGsuiteUser()) {
    return resText("ログインアドレスが違います");
  }

  postSlackMessage(getMessageArray(e).join("\n"));

  return resText("OK!");
}

function testSlack() {
  const array = getMessageArray();

  postSlackMessage(array.join("\n"))
}

function getMessageArray(e) {
  const num = getNum(e);
  const array = [
    getLoginUser() + `さんからのリクエストでランダムに \`${num}\` 選ばれました :tada:`,
    "",
    "```",
    ...(getMember(num)),
    "```",
    "",
    "ランチとか1on1とか楽しんできてください:+1::star:",
  ];

  return array;
}

function postSlackMessage(message) {
  var postUrl = 'https://hooks.slack.com/services/BBBBB/XXXX/????????'; // webhookurlは自分のチャンネルで取得してください
  var username = 'Choice BOT';
  var icon = ':slightly_smiling_face:';

  var jsonData =
  {
     "username" : username,
     "icon_emoji": icon,
     "text" : message
  };
  var payload = JSON.stringify(jsonData);

  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };

  UrlFetchApp.fetch(postUrl, options);
}

/**
 * memberを指定の数だけ返す
 */
function getMember(num){
  const member = [
    'Aさん',
    'Bさん',
    'Cさん'
  ];

  return shuffle(member).slice(0,num);
}

/**
 * 何人にするか
 * 基本は1人
 * @return number
 */
function getNum(e) {
  if (!e) {
    return 1;
  }

  const num = parseInt(e.parameter.num);

  return isNaN(num) ? 1 : num; 
}

/**
 * ログインユーザーのアドレスを確認して弊社社員か確認する
 */
function isOurGsuiteUser() {
  const user = Session.getActiveUser();
  const email = user.getEmail();

  return email && email.split("@") && email.split("@")[1] === "gmail.com";
}

/**
 * ログインユーザーを取得
 * return Sting
 */
function getLoginUser() {
  const user = Session.getActiveUser();
  const email = user.getEmail();

  if (email && email.split("@") && email.split("@")[0]) {
    return email.split("@")[0];
  }

  return "Who??";
}


/**
 * responceのラッパーにしようとしている
 */
function resText(text) {
  return ContentService.createTextOutput(text)
}


/**
 * 配列をシャッフルする
 */
function shuffle(array) {
  for (let i = array.length - 1; i >= 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }

  return array;
}

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1