프로젝트/42프로젝트

간단하게 슬렉 봇 만드는 방법

susong 2023. 7. 24. 20:17
728x90

들어가면서 

42서울에는 달리기 기록을 올리는 채널이 있다. 그런데 잘 살펴보면 이 채널에 사람이 매일 날짜를 올리고 그 아래에 쓰레드를 통해서 사람들이 자신의 달리기 기록을 인정받는다. 개인적으로 날짜 치는 것이 귀찮을 것이라고 생각했고, 그래서 채널을 위해서 간단한 날짜 봇 및 날씨를 알려주는 봇을 만들었다. 이번에는 다른 회고와 다르게 실제로 어떻게 만드는지도 설명해볼까 한다.

 


간단하게 슬렉 봇 만들기

준비물 : 파이썬에 대한 간단한 지식, Slack Bot TOKEN, 파이썬이 설치된 PC

아래 방법은 LINUX 및 MAC 기준입니다.

 

1. 가장 먼저 필요한 라이브러리를 설치해줍니다.

pip3 install slack_sdk
pip3 install request

2. 필요한 파일들을 만듭니다. (main.py, .env)

touch main.py
touch .env

3. 원하시는 IDE로 파일을 엽니다(VSC 추천)

code main.py
# 혹은 VIM 유저는 vim main.py로 여시면 됩니다.

4. 필요한 라이브러리 가져오기

from datetime import datetime
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from dotenv import load_dotenv
import os
import requests
import json

5. .env 설정하기

# SLACK BOT
SLACK_TOKEN=(TOKEN 유출안되게 조심하세요!)
SLACK_ERROR_URI=(이 것은 선택!)
SLACK_CHANNEL=(보내고 싶은 채널명)

# WEATHER
# https://openweathermap.org/api 여기에 회원가입 후에 API_KEY복사 붙여넣기 하면 됩니다.
WEATHER_API_KEY=(유출 안되게 조심하세요!)

6. 환경변수 가져오기

load_dotenv()  # .env 파일에서 환경 변수를 로드합니다.

slack_bot_token = os.getenv("SLACK_TOKEN")
slack_channel = os.getenv("SLACK_CHANNEL")
apiKey = os.getenv("WEATHER_API_KEY")

7. 슬렉에 메시지 보내는 함수 제작

def send_slack_message(message):
    # WebClient 인스턴스 초기화
    client = WebClient(token=slack_bot_token)
    try:
        response = client.chat_postMessage(
            channel=slack_channel,
            text=message,
            blocks=[
                {
                "type": "section",
                "text": {
                "type": "mrkdwn",
                "text": message,
                }
            },
            ]
        )
    except SlackApiError as e:
        print(f"Error sending message: {e}")

8. 날씨 가져오기 위한 세팅 

# 초기세팅
city = "Seoul" # 원하는 도시 설정
lang = 'kr' # 언어 설정
units = 'metric' # 단위 설정(섭씨)

# API 요청보낼 곳 설정
api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={apiKey}&lang={lang}&units={units}"

# API 요청
result = requests.get(api)
result = json.loads(result.text)

# 나온 데이터 중 필요 데이터 구분
name = result['name']
lon = result['coord']['lon']
lat = result['coord']['lat']
weather = result['weather'][0]['description']
temperature = result['main']['temp']
humidity = result['main']['humidity']

9. 출력문 만들기

# 출력문 만들기
now = datetime.now() # 현재 시간을 얻습니다.
date_time = now.strftime("[*%m월 %d일, 오늘의 달리기 기록*]") # 문자열로 변환합니다.
message = date_time + f"\n\n오늘의 날씨: {weather}(기온: {temperature}, 습도: {humidity})\n * 기준: 서울, 경도: {lon}, 위도: {lat}"

10. 발송!

send_slack_message(message)

 

이렇게 간단하게 슬렉 봇을 만들 수 있다. 실행시켜보면 바로 아래와 같이 봇이 메시지를 보낸다.


매일 특정시간에 보내기

매일매일 내가 서버에 들어가서 저것을 보낼 수는 없지않은가? 컴퓨터에게 알아서 특정 시간에 돌리도록 해보자

 

1. crontab 스케쥴러 편집에 들어간다.

crontab -e

2. 해당 파일을 특정 시간에 돌리라고 명령해둔다.

# ...기존에 작성되어있는 안내문

# 매일 오전 9시에 실시하겠다는 의미다.
0 9 * * * python3 (해당 .py 파일 경로, 이 때에는 절대경로로!)

3. 이렇게 작성하고 esc -> :wq 입력 -> 엔터를 진행하면 crontab이 설정된다.

 

TIP: 9시가 아닌 다른 시간에 작동합니다 -> 해당 서버의 기준 시간을 확인해보세요 date를 입력하면 됩니다. UTC 기준으로 설정되어있다면, KST로 변경하는 과정을 거치면 정상적으로 9시에 해당 파일이 실행되게 됩니다.

 

진짜 끝!

728x90