티스토리 뷰

슬랙 리마인드 자동화 파이썬 코드

파이썬을 이용해 정말 간단한 코딩만으로 슬랙 리마인드를 자동화시킬 수 있습니다. 슬랙에서는 변숫값을 순환시킬 수 있는 방법이 여러 가지 있겠으나, 저는 가장 쉽고 빠르게 할 수 있는 파이썬을 사용했습니다.

 

사용하고자 하시는분들은 슬랙 API 토큰 및 채널 ID를 자신의 정보값으로 변경 한 뒤 사용해 주시면 되는데, 슬랙 api와 채널 id 확인하는 방법이 궁금하신 분들은 하단의 링크 참고해 주시길 바랍니다.

 

 

 

 

 리마인드 내용을 변경하고 싶다면 하단 f-string 즉 f":~~:" 안의 ~~ 부분을 바꿔주시면됩니다.

import slack
from datetime import datetime, timedelta
import calendar
import time

# 슬랙 API 토큰 및 채널 ID 설정
slack_token = "슬랙 api id"
channel_id = "채널 id"

# 슬랙 클라이언트 초기화
client = slack.WebClient(token=slack_token)

# 9명의 이름 리스트
names = ["변수1", "변수2", "변수3", "변수4", "변수5", "변수6", "변수7", "변수8", "변수9"]

def is_first_friday_of_month(dt):
    return dt.weekday() == 4 and dt.day <= 7

def is_friday_9_am(dt):
    return dt.weekday() == 4 and dt.hour == 9 and dt.minute < 1

def get_monthly_rotation_index(dt):
    return (dt.year * 12 + dt.month - 1) % len(names)

# 순환 인덱스 초기화
rotation_index = get_monthly_rotation_index(datetime.now())

while True:
    now = datetime.now()

    # 매달 첫 번째 금요일에만 순환 인덱스 업데이트
    if is_first_friday_of_month(now):
        rotation_index = get_monthly_rotation_index(now)

    # 매주 금요일 오전 9시에만 메시지 전송
    if is_friday_9_am(now):
        assigned_names = [names[(i + rotation_index) % len(names)] for i in range(len(names))]
        # 슬랙에 메시지 보내기
        client.chat_postMessage(channel=channel_id, text=f":parrot:우리의 건강과 상쾌한 기분을 위해 깔끔!하고 빠르게! 청소하도록 합시다!:parrot:\n"
                                                         f":heart_eyes: 공용 공간을 먼저 20분 후딱 청소하고. 내 자리는 나중에 :pray:\n"
                                                         f":two_hearts: 먼저 끝나면 서로 서로 도와주면 어떨까요? :two_hearts:\n"
                                                         f":boom: 담당 파트는 한 달에 한번씩 로테이션으로 돌아갑니다! :muscle:\n"
                                                         f":clock9: 09:00 ~ 09:20 :clock9: 공용 공간 위주 :smile:\n\n"
                                                         f"*휴게실, 창고* 휴게실에서의 편안한 휴식과, 창고에서의 이동 시 안전을 위해. 물품 및 박스 정리 정돈을 부탁해요. 먼지가 날릴테니 환기 필수! (*{assigned_names[0]}* 님)\n\n"
                                                         f"*밀대*-사용 전 빨아서 사용해 주세요. 다 사용한 후에는 다시 빨아서 제자리에 놓아주세요. 가능하다면 사용 전후 세척 시 락스 소량 첨가! (*{assigned_names[1]}* 님, *({assigned_names[2]}* 님)\n\n"
                                                         f"*청소기*-로봇 청소기가 초벌을 했지만 책상 밑 등 구석구석 못한 곳도 많을꺼에요. 겨울에는 특히 흙먼지가 눈에 뭍어서 많이 들어오거든요. (*{assigned_names[3]}* 님)\n\n"
                                                         f"*싱크대 및 냉장고 세척 및 비움* - 1인 당 1컵만 그릇 정리대를 써주세요. 한동안 안 쓴 컵이나 식기는 싱크대 밑으로 들어갑니다. 개수구까지 세척 부탁 드립니다. 위생을 위 냉장고 안을 정리 해주실때 안 먹는 음식은 모두 폐기 부탁 드려요. (*{assigned_names[4]}* 님)\n\n"
                                                         f"*회의실 책상 및 주변 정리정돈*-회의실에는 항상 많은 물건이 있어서 정신없기 쉬워요. 센스 있는 정리 부탁 드려요! 테이블과 의자가 삐걱거릴땐 육각렌치로 한번씩 조여주시구요! (*{assigned_names[5]}* 님)\n\n"
                                                         f"*간식, 커피 테이블 주변 정리 및 쓰레기 버리기* - 청소를 하다보면 쓰레기가 많이 나올꺼에요. 쓰레기 봉투가 얇으니 청소 전후 2번 비우거나 박스에 담아 옮기는게 안전할것 같아요. (*{assigned_names[6]}* 님)\n\n"
                                                         f"*업무 공간 전체 책상 간단 정리 및 책걸상 먼지 제거* - 팀원들의 책걸상, 모니터에 먼지를 제거해주세요. 먼지 제거를 하면서 약간의 정리를 해준다면 받는 이도 기쁠꺼에요. (*{assigned_names[7]}* 님)\n\n"
                                                         f"*인테리어 소품 및 사무실 곳곳 정리정돈* - 액자, 화이트 보드, 트리 주변, 인형, 선 정리 등등등 (*{assigned_names[8]}* 님)\n\n"
                                                         f"*서울 사무실* 청소 *(00)* 님)\n\n"
                                                         f"*휴가자 있을 시* 인테리어 소품 및 사무실 곳곳 정리정돈 하시는 (*{assigned_names[8]}* 님께서 휴가자 청소구역까지 청소 해주세요! )\n")
        # 메시지를 보낸 후에는 더 이상 메시지를 보내지 않도록 루프를 종료합니다.
        break


    # 다음 검사 시간까지 대기 (다음 시간으로 넘어가기 위해 1시간 대기)
    time.sleep(3600)

 

 

 

 

 

 


코드 해석

나에게 맞게 커스텀하실 분들은 코드 해석 확인하세요!

import slack
from datetime import datetime, timedelta
import calendar
import time

 

 

프로그램을 돌리기 위해 필요한 파이썬 모듈 안 깔려있다면 terminal에서 pip install 키워드 입력 후 다운해 주시면 됩니다.

 

# 슬랙 API 토큰 및 채널 ID 설정
slack_token = "슬랙 api id"
channel_id = "채널 id"

 

 

상단에 링크 확인하면 슬랙 api 토큰 및 채널 id 확인할 수 있습니다.

 

# 슬랙 클라이언트 초기화
client = slack.WebClient(token=slack_token)

 

 

slack.webclient를 사용해 슬랙 클라이언트를 초기화합니다. 이 클라이언트를 통해 슬랙 api에 접근할 수 있습니다.

 

# 9명의 이름 리스트
names = ["변수1", "변수2", "변수3", "변수4", "변수5", "변수6", "변수7", "변수8", "변수9"]

 

 

청소 담당자의 이름을 담은 리스트를 만듭니다. 이 이름들은 매주 금요일마다 순환하게 됩니다.

 

저는 필요한 변수 값을 입력하는 것으로, 9개를 만들어두었습니다. 3개만 필요하다면 변수 3까지만 사용하시고 대괄호로 닫아주시면 됩니다.  ex) ["변수1", "변수2", "변수3"]

 

def is_first_friday_of_month(dt):
    return dt.weekday() == 4 and dt.day <= 7

def is_friday_9_am(dt):
    return dt.weekday() == 4 and dt.hour == 9 and dt.minute < 1

def get_monthly_rotation_index(dt):
    return (dt.year * 12 + dt.month - 1) % len(names)

 

is_first_friday_of_month 함수는 주어진 날짜가 그 달의 첫 번째 금요일인지 확인합니다.

 

weekday()에서의 dt는 요일을 나타내며, 월요일은 0 일요일은 6까지 값을 반환합니다. hour은 시간을 나타내며 0부터 23까지의 값을 가집니다. minute는 분을 나타내며 0부터 59까지의 값을 가집니다.

 

return (dt.year * 12 + dt.month - 1) % len(names)는 주어진 날짜 dt에 대한 월별 순환 인덱스를 계산하여 반환하는 식으로 연도와 월을 월 단위로 변환한 값을 나타내며, % len(names) 순환인덱스를 names 리스트 길이로 나눈 나머지를 계산하기 때문에 인덱스가 names 리스트의 범위를 벗어나지 않고 순환하게 됩니다.

 

# 순환 인덱스 초기화
rotation_index = get_monthly_rotation_index(datetime.now())

 

함수에 주어진 날짜에 대한 순환 인덱스를 계산하며, 매달 첫 번째 금요일에 업데이트됩니다.

 

while True:
    now = datetime.now()

    # 매달 첫 번째 금요일에만 순환 인덱스 업데이트
    if is_first_friday_of_month(now):
        rotation_index = get_monthly_rotation_index(now)

    # 매주 금요일 오전 9시에만 메시지 전송
    if is_friday_9_am(now):
        assigned_names = [names[(i + rotation_index) % len(names)] for i in range(len(names))]

 

while루프를 통해 매시간마다 현재 시간 확인하고, 첫 번째 금요일일 경우 순환 인덱스 업데이트하며, 금요일 오전 9시가 되면 청소 담당자를 알리는 메시지를 슬랙 채널에 보냅니다.

 

# 슬랙에 메시지 보내기
client.chat_postMessage(channel=channel_id, text=f":parrot:우리의 건강과 상쾌한 기분을 위해 깔끔!하고 빠르게! 청소하도록 합시다!:parrot:\n"
                                                 f":heart_eyes: 공용 공간을 먼저 20분 후딱 청소하고. 내 자리는 나중에 :pray:\n"
                                                 f":two_hearts: 먼저 끝나면 서로 서로 도와주면 어떨까요? :two_hearts:\n"
                                                 f":boom: 담당 파트는 한 달에 한번씩 로테이션으로 돌아갑니다! :muscle:\n"
                                                 f":clock9: 09:00 ~ 09:20 :clock9: 공용 공간 위주 :smile:\n\n"
                                                 f"*휴게실, 창고* 휴게실에서의 편안한 휴식과, 창고에서의 이동 시 안전을 위해. 물품 및 박스 정리 정돈을 부탁해요. 먼지가 날릴테니 환기 필수! (*{assigned_names[0]}* 님)\n\n"
                                                 f"*밀대*-사용 전 빨아서 사용해 주세요. 다 사용한 후에는 다시 빨아서 제자리에 놓아주세요. 가능하다면 사용 전후 세척 시 락스 소량 첨가! (*{assigned_names[1]}* 님, *({assigned_names[2]}* 님)\n\n"
                                                 f"*청소기*-로봇 청소기가 초벌을 했지만 책상 밑 등 구석구석 못한 곳도 많을꺼에요. 겨울에는 특히 흙먼지가 눈에 뭍어서 많이 들어오거든요. (*{assigned_names[3]}* 님)\n\n"
                                                 f"*싱크대 및 냉장고 세척 및 비움* - 1인 당 1컵만 그릇 정리대를 써주세요. 한동안 안 쓴 컵이나 식기는 싱크대 밑으로 들어갑니다. 개수구까지 세척 부탁 드립니다. 위생을 위 냉장고 안을 정리 해주실때 안 먹는 음식은 모두 폐기 부탁 드려요. (*{assigned_names[4]}* 님)\n\n"
                                                 f"*회의실 책상 및 주변 정리정돈*-회의실에는 항상 많은 물건이 있어서 정신없기 쉬워요. 센스 있는 정리 부탁 드려요! 테이블과 의자가 삐걱거릴땐 육각렌치로 한번씩 조여주시구요! (*{assigned_names[5]}* 님)\n\n"
                                                 f"*간식, 커피 테이블 주변 정리 및 쓰레기 버리기* - 청소를 하다보면 쓰레기가 많이 나올꺼에요. 쓰레기 봉투가 얇으니 청소 전후 2번 비우거나 박스에 담아 옮기는게 안전할것 같아요. (*{assigned_names[6]}* 님)\n\n"
                                                 f"*업무 공간 전체 책상 간단 정리 및 책걸상 먼지 제거* - 팀원들의 책걸상, 모니터에 먼지를 제거해주세요. 먼지 제거를 하면서 약간의 정리를 해준다면 받는 이도 기쁠꺼에요. (*{assigned_names[7]}* 님)\n\n"
                                                 f"*인테리어 소품 및 사무실 곳곳 정리정돈* - 액자, 화이트 보드, 트리 주변, 인형, 선 정리 등등등 (*{assigned_names[8]}* 님)\n\n"
                                                 f"*서울 사무실* 청소 *(00)* 님)\n\n"
                                                 f"*휴가자 있을 시* 인테리어 소품 및 사무실 곳곳 정리정돈 하시는 (*{assigned_names[8]}* 님께서 휴가자 청소구역까지 청소 해주세요! )\n")
# 메시지를 보낸 후에는 더 이상 메시지를 보내지 않도록 루프를 종료합니다.
break

 

보낼 메시지 내용과 메시지 보낸 뒤 더 이상 메시지를 보내지 않도록 루프를 종료하는 탈출문이 있습니다. 금요일 9시에 한 번만 메시지를 보내도록 하기 위함입니다.

 

# 다음 검사 시간까지 대기 (다음 시간으로 넘어가기 위해 1시간 대기)
time.sleep(3600)

 

코드를 1시간 동안 멈추게 하고, 다음 검사 시간까지 대기하기 위한 용도입니다.

 

 

 

 

 

 

 

 

 

 

슬랙 API key, 채널 ID 확인하는 방법

 

파이썬으로 슬랙 리마인드 자동화 하는 방법(Slack API )

슬랙 리마인드 자동화하는 방법 파이썬으로 슬랙 리마인드 알림 자동화 하는 방법! 알려드립니다. 파이썬에서 slack API 라이브러리를 사용해서 말이죠! 파이썬을 몰라도 할 수 있습니다. 코딩 하

first.perbj96.com

 

반응형