LoginSignup
0
1

More than 1 year has passed since last update.

GAS プラクティス

Last updated at Posted at 2021-06-09

クラスを使用する

slackのレスポンスからメンバー情報をつくる

class/Member.gs
class Member{
  constructor(res, ws){
    this.ws = ws.name;
    this.id = res.id;
    this.name = {
      display : res.profile.display_name,
      real : res.real_name,
    };
    this.email = res.profile.email;
    this.status = getStatus(res);
  }

  getName(){
    const name = (this.name.display) ? this.name.display : this.name.real;
    return name;
  }

  getOutList(){
    return [
      this.ws,
      this.id,
      this.name.real,
      this.name.display,
      this.email,
      this.status
    ];
  }
}

IDやパスワードはjsonファイルに記載する

config.gs
var CONFIG_FILE_ID = (jsonファイルのファイルID);

function readConfig(){
  const file = DriveApp.getFileById(CONFIG_FILE_ID);
  const data = file.getBlob().getDataAsString();
  return JSON.parse(data);
}

slackに送信する

slack.gs
function slackChannel(webhook, message) {
  const jsonData = {
    'text' : message
  };

  const options = {
    'method' : 'post',
    'contentType' : 'application/json',
    'payload' : JSON.stringify(jsonData)
  };

  UrlFetchApp.fetch(webhook, options);
}

function slackDM(token, id, text){

  const url = 'https://slack.com/api/chat.postMessage';
  const option = {
    method: 'POST',
    payload : {
      token: token,
      channel: '@' + id,
      text: text,
    },
  };

  UrlFetchApp.fetch(url, option);
}

function getSlackReactions(token, link){

  const {channel, timestamp} = getContentsFromSlackLink(link);

  const url = 'https://slack.com/api/reactions.get'
    + '?token=' + token
    + '&channel=' + channel
    + '&timestamp=' + timestamp
    + '&full=true'
  ;

  let res = UrlFetchApp.fetch(url, {muteHttpExceptions:true});
  return JSON.parse(res);
}

function getContentsFromSlackLink(link){
  link = link.replace(/https(.*?)archives\//, '');
  Logger.log(link);
  link = link.split('/');
  const channel = link[0];
  let timestamp = link[1].replace('p', '');
  const timestamp1 = timestamp.substr(0, 10);
  const timestamp2 = timestamp.substr(10);
  timestamp = timestamp1 + '.' + timestamp2;
  return {channel, timestamp};
}

spreadsheet関係

sheet.gs

function getSheetData(sheetConfig, spreadSheetId){
  let data = getSheetDataFull(sheetConfig, spreadSheetId);
  [...Array(sheetConfig.row.data - 1)].forEach(_ => data.shift());
  return data;
}

function getSheetDataFull(sheetConfig, spreadSheetId){
  const ss = (spreadSheetId !== undefined) ? SpreadsheetApp.openById(spreadSheetId) : SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName(sheetConfig.name);
  return sheet.getDataRange().getValues();
}

function setText(sheetConfig, row, column, text){
  setList(sheetConfig, row, column, [[text]]);
}

function setList(sheetConfig, row, column, list){
  if(!list.length) return;
  const sheet = SpreadsheetApp.getActive().getSheetByName(sheetConfig.name);
  sheet.getRange(row, column, list.length, list[0].length).setValues(list);
}

function setListAnotherSheet(spreadSheetId, sheetConfig, row, column, list){
  if(!list.length) return;
  const sheet = SpreadsheetApp.openById(spreadSheetId).getSheetByName(sheetConfig.name);
  sheet.getRange(row, column, list.length, list[0].length).setValues(list);
}

function refreshSheet(sheetName, outList, startColumn, startRow){

  if(!outList[0].length) return;
  const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);

  startRow = startRow ? startRow : 2;
  startColumn = startColumn ? startColumn : 1;
  sheet.getRange(startRow, startColumn, sheet.getLastRow(), outList[0].length).clear();
  sheet.getRange(startRow, startColumn, outList.length, outList[0].length).setValues(outList);
}

function addSheet(sheetConfig, column, list){
  if(!list.length) return;
  const sheet = SpreadsheetApp.getActive().getSheetByName(sheetConfig.name);
  sheet.insertRows(sheetConfig.row.data, list.length);
  sheet.getRange(sheetConfig.row.data, column, list.length, list[0].length).setValues(list);
}

function addSheetLastRow(sheetConfig, list, column){
  if(!list.length) return;
  const sheet = SpreadsheetApp.getActive().getSheetByName(sheetConfig.name);

  sheet.getRange(
    sheet.getLastRow() + 1,
    column !== undefined ? column : 1,
    list.length,
    list[0].length
  ).setValues(list);
}

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