티스토리 뷰

python lecture/project

[edu] slack bot

burningrizen 2018. 8. 28. 22:10

[Slack]



여러 사람이 프로젝트를 할때 메신저로 많은 이야기를 합니다.


그중에 요즘에 가장 많이 쓰고 유용한 Slack 이 있습니다.


이것이 좋은 이유는 채팅방에 새로온 초대된 사람이 이전 내용을 다 볼 수 있습니다.


이전 히스토리를 따로 설명하는 비용을 줄일 수 있습니다.



slackclient 버전 1.30 기준





[chat bot]



슬랙을 이용하여 챗봇을 만들어 보겠습니다.


우선 슬랙의 기능을 사용하기 위해서는 토큰을 얻어야 합니다.



https://api.slack.com/custom-integrations/legacy-tokens



발급받은 토큰은 따로 저장해 두세요.



from slacker import Slacker
import time

slack_token = '발급받은토큰'


def notification(massage):
slack = Slacker(slack_token)
slack.chat.post_message('#채널',massage)


위의 코드로 간단하게 해당 채널로 메세지를 보낼 수 있습니다.




from slacker import Slacker
import time

slack_token = '발급받은토큰'


def notification(massage):
slack = Slacker(slack_token)
slack.chat.post_message('#채널',massage,'python bot')


from slackclient import SlackClient


sc = SlackClient(slack_token)
if sc.rtm_connect():
while True:
recive_data = sc.rtm_read()
if len(recive_data):
keys = list(recive_data[0].keys())
if 'type' in keys and 'text' in keys :
print(recive_data[0]['text'])
time.sleep(1)
else:
print("connection failed")


받은 메세지를 실시간으로 찍는 코드 입니다.



여기서는 반복적으로 보내는게 필터가 안되기 때문에 좀 수정을 해줘야 합니다.



from slacker import Slacker
import time

slack_token = '발급받은토큰'


def notification(massage):
slack = Slacker(slack_token)
slack.chat.post_message('#채널',massage, 'python bot')


from slackclient import SlackClient

sc = SlackClient(slack_token)
if sc.rtm_connect():
while True:
recive_data = sc.rtm_read()
if len(recive_data):
keys = list(recive_data[0].keys())
# if 'type' in keys and 'text' in keys :
if 'type' in keys and 'text' in keys and 'user' in keys:
print(recive_data[0])
massage = recive_data[0]['text']
notification(massage + '이거?')
time.sleep(1)
else:
print("connection failed")


이렇게 조건검사를 할때 type, text, user 를 검사하는 이유는 



파이썬에서 계속 서로 핑퐁되면서 무한히 보내는걸 막기 위함입니다.




mac 에서 ssl 문제가 있을 경우


여기서 다운 받은후 

환경변수에  
export WEBSOCKET_CLIENT_CA_BUNDLE=DigiCertGlobalRootCA.crt

환경변수 설정

파이썬 코드에
import os
os.environ['REQUESTS_CA_BUNDLE'] = '/path/YourRootCertificate.crt' # Requests
os.environ['SSL_CERT_FILE'] = '/path/YourRootCertificate.crt' # OpenSSL
os.environ['SSL_CERT_DIR'] = '/path/'


direct message 보내는 법(dm channel 확인하기)










댓글