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라든지로 움직입니다).

좋은 웹페이지 즐겨찾기