Slack에서 점심 식사 초대

9863 단어 슬랙파이썬gas

초대



매일 정해진 시간에 channel 전원을 점심을 초대해, 출발 시간 직전에 출발을 알려 드리겠습니다.
「 좋은 느낌으로 점심을 결정하는 Slack 봇을 만들었다 」를 사용하고 있습니다.
function isHoliday(){
  var today = new Date();
  //土日か判定
  var weekInt = today.getDay();
  if(weekInt <= 0 || 6 <= weekInt){
    return true;
  }

  //祝日か判定
  var calendarId = "ja.japanese#[email protected]";
  var calendar = CalendarApp.getCalendarById(calendarId);
  var todayEvents = calendar.getEventsForDay(today);
  if(todayEvents.length > 0){
    return true;
  }
  return false;
}
  var holiday = isHoliday()
    if(holiday == false ){
        ~~~
    }

그래서 평일에만 실행하려고합니다.

시간이 되면 음성을 걸었으면 좋기 때문에 리액션해 준 사람에게 말을 걸게 했습니다(로컬 PC로부터 Python으로 무리해)



점심 가는 사람 식별



token과 채널 ID와 BOTID와 준비를합니다.
채널 ID는 채널 목록에서 '링크 복사'에서 얻을 수 있습니다.
BOTID도 Bot의 발언에서 "링크 복사"로 얻을 수 있습니다.
import requests
import json
import math
import time

histurl = "https://slack.com/api/channels.history"
posturl = "https://slack.com/api/chat.postMessage"
token = "SLACKTOKEN"
channel_id = "SLACKCHANNNELID"
bot_id = "SLACKBOTID"

channels.history로 돌아오는 타임 스탬프 (ts)가 UNIX 시간이므로
    #今日取得(UNIX時間)
    now = time.time()
    #3600=1時間 前の時間
    nowd = math.floor(now) - 3600

채널 발언을 json에서 가져옵니다.
    payload = {
        "token": token,
        "channel": channel_id
        }
    response = requests.get(histurl, params=payload)
    json_data = response.json()

bot 1시간 전의 발언에 반응한 사람을 확인합니다.
    for i in json_data["messages"]:
        try:
            if i["bot_id"] == bot_id:
                if float(i['ts']) >= nowd:
                    for u in i['reactions']:
                        for v in u["users"]:
                            realist.append(v)
        except:
            pass

나머지는 출발을 알리는 메시지를 Slack에 던집니다.
    if realist != []:
        for ulis in realist:
            atesaki += "<@" + ulis + ">"
        message = atesaki + "お昼いけますか?:airplane:"
        postpayload = {
            "token": token,
            "channel": channel_id,
            "username": "ランチのお誘い",
            "icon_emoji": ':ramen:',
            "text": message
        }
    else:
        postpayload = {
            "token": token,
            "channel": channel_id,
            "username": "ランチのお誘い失敗",
            "icon_emoji": ':kevin:',
            "text": "誰もお昼に行かないようです"
        }
    requests.post(posturl, data = postpayload)

나머지는 어딘가에서 정기 실행
전부 1개에 정리하고 싶기 때문에 그중 전반부분을 Python으로 해(해 FaaS라든지로 움직입니다).

좋은 웹페이지 즐겨찾기