IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서
현상
pypi를 통해 파이썬 slackbot 라이브러리를 설치하면 IFTTT에서 slack에 게시 한 내용을 픽업 할 수 없습니다.
pip install slackbot
run.py# -*- encoding: utf-8 -*-
from slackbot.bot import Bot
from slackbot.bot import listen_to
@listen_to('てすと')
def listen_func(message):
message.send('ぽん')
def main():
bot = Bot()
bot.run()
if __name__ == '__main__':
main()
# 이유
이 기사 에 있는 것처럼, 통상의 투고와 IFTTT 경유의 투고에서는 포맷이 다르기 때문입니다.
데이터의 취득은 slackbot의 「dispacher.py」라고 하는 소스가 하고 있습니다만,
여기에서 취득한 데이터를 print하는 소스를 넣어 내용을 보면 ...
dispacher.py def dispatch_msg(self, msg):
category = msg[0]
msg = msg[1]
print(msg) # <- 44行目にprintを仕込む
if not self._dispatch_msg_handler(category, msg):
if category == u'respond_to':
if not self._dispatch_msg_handler('default_reply', msg):
self._default_reply(msg)
python run.py
# 普通に投稿した場合
{
'type': 'message',
'user': ‘XXXXXXXX’,
'text': 'てすと',
'client_msg_id': ‘XXXXXXX’,
(略)
}
# IFTTT経由で投稿した場合
{
'username': 'IFTTT',
'icons': {'image_36': 'https://a.slack-edge.com/8f51/img/services/ifttt_36.png',
'image_48': 'https://a.slack-edge.com/8f51/img/services/ifttt_48.png', 'image_72':
'https://a.slack-edge.com/8f51/img/services/ifttt_72.png'},
'attachments': [
{
'pretext': 'しゅっしゃ',
'fallback': 'しゅっしゃ',
'mrkdwn_in': ['text', 'pretext']
}
],
(略)
}
전혀 다릅니다.
그래서 일반적으로 게시물의 데이터 형식 만 지원하므로,
IFTTT의 게시물은 dispacher.py에서 데리러 있지 않습니다.
대책
dispacher의 msg를 얻는 부분을 다시 씁니다.
아래는 dispacher.py의 49 행 ~입니다.
(2019/9/15 갱신: 아무래도 메시지의 형식이 미묘하게 바뀐 것 같습니다, 코멘트 감사합니다!)
(편집 전) dispacher.py def _dispatch_msg_handler(self, category, msg):
responded = False
for func, args in self._plugins.get_plugins(category, msg.get('text', None)):
if func:
responded = True
try:
(편집 후) dispacher.py def _dispatch_msg_handler(self, category, msg):
responded = False
text = None
if 'attachments' in msg and len(msg.get('attachments')) > 0:
text = msg['attachments'][0].get('pretext', None)
elif 'text' in msg:
text = msg.get('text', None)
for func, args in self._plugins.get_plugins(category, text):
if func:
responded = True
try:
차이:
htps : // 기주 b. 코 m / ぃ s05 / s ぁ 쿠보 t / 코 m 파레 /에서 ゔ ぉ p. . . 주전자 10 : ゔぇぉ p
이것을 다시 써서 python run.py 하면 제대로 IFTTT에도 반응하게 됩니다.
수정된 코드
htps : // 기주 b. 코 m / 주전자 10 / s ぁ ck 보트 t / t ree /
(※코드 본체의 수정만으로 특별히 테스트는 추가하지 않습니다...)
참고 기사
Reference
이 문제에 관하여(IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yakan10/items/6fa70ab7643e66022f3b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pip install slackbot
# -*- encoding: utf-8 -*-
from slackbot.bot import Bot
from slackbot.bot import listen_to
@listen_to('てすと')
def listen_func(message):
message.send('ぽん')
def main():
bot = Bot()
bot.run()
if __name__ == '__main__':
main()
def dispatch_msg(self, msg):
category = msg[0]
msg = msg[1]
print(msg) # <- 44行目にprintを仕込む
if not self._dispatch_msg_handler(category, msg):
if category == u'respond_to':
if not self._dispatch_msg_handler('default_reply', msg):
self._default_reply(msg)
python run.py
# 普通に投稿した場合
{
'type': 'message',
'user': ‘XXXXXXXX’,
'text': 'てすと',
'client_msg_id': ‘XXXXXXX’,
(略)
}
# IFTTT経由で投稿した場合
{
'username': 'IFTTT',
'icons': {'image_36': 'https://a.slack-edge.com/8f51/img/services/ifttt_36.png',
'image_48': 'https://a.slack-edge.com/8f51/img/services/ifttt_48.png', 'image_72':
'https://a.slack-edge.com/8f51/img/services/ifttt_72.png'},
'attachments': [
{
'pretext': 'しゅっしゃ',
'fallback': 'しゅっしゃ',
'mrkdwn_in': ['text', 'pretext']
}
],
(略)
}
dispacher의 msg를 얻는 부분을 다시 씁니다.
아래는 dispacher.py의 49 행 ~입니다.
(2019/9/15 갱신: 아무래도 메시지의 형식이 미묘하게 바뀐 것 같습니다, 코멘트 감사합니다!)
(편집 전) dispacher.py
def _dispatch_msg_handler(self, category, msg):
responded = False
for func, args in self._plugins.get_plugins(category, msg.get('text', None)):
if func:
responded = True
try:
(편집 후) dispacher.py
def _dispatch_msg_handler(self, category, msg):
responded = False
text = None
if 'attachments' in msg and len(msg.get('attachments')) > 0:
text = msg['attachments'][0].get('pretext', None)
elif 'text' in msg:
text = msg.get('text', None)
for func, args in self._plugins.get_plugins(category, text):
if func:
responded = True
try:
차이:
htps : // 기주 b. 코 m / ぃ s05 / s ぁ 쿠보 t / 코 m 파레 /에서 ゔ ぉ p. . . 주전자 10 : ゔぇぉ p
이것을 다시 써서 python run.py 하면 제대로 IFTTT에도 반응하게 됩니다.
수정된 코드
htps : // 기주 b. 코 m / 주전자 10 / s ぁ ck 보트 t / t ree /
(※코드 본체의 수정만으로 특별히 테스트는 추가하지 않습니다...)
참고 기사
Reference
이 문제에 관하여(IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yakan10/items/6fa70ab7643e66022f3b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yakan10/items/6fa70ab7643e66022f3b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)