More Related Content Similar to hubot-slack v4移行時のハマりどころ #hubot_chatops (20) hubot-slack v4移行時のハマりどころ #hubot_chatops8. 6 . 2
7
v3系とv4系におけるSlacke SDKのバージョンについて
hubot-slack v3.4.2 (v3系最新)
@slack/client ⇒1.4.1を利用(~1.4.0)
hubot-slack 4.3.2 (v4系最新)
@slack/client ⇒3.8.1を利用(^3.4.0)
11. hubot-slack v3
robot.respond /attachments test$/i, (msg) ->
data =
content:
text: '*error*: something bad happened'
color: 'danger'
mrkdwn_in: ['text']
channel: msg.envelope.room
robot.emit 'slack.attachment', data
hubot-slack v4
robot.respond /attachments test$/i, (msg) ->
data =
attachments: [
text: '*error*: something bad happened'
color: 'danger'
mrkdwn_in: ['text']
]
msg.send data
12. 9 . 2
10 . 1
名前とIDの相互変換
(SlackSDK更新により)名前またはIDから
ユーザオブジェクトやチャンネルオブジェクトを
取得するメソッドの互換性が無くなりました
robot.adapter.client.getUserByName('knjcode') # hubot-slack v3
↓
robot.adapter.client.rtm.dataStore.getUserByName('knjcode') # hubot-slack v4
これまで 配下にあったメソッドが
配下に移動
以降に細かく解説します
13. 10 . 2
getUserByID ⇒getUserById
メソッド名およびメソッド位置の変更
hubot-slack v3
robot.adapter.client.getUserByID('U0MU03G5V').name
# => knjcode
hubot-slack v4
robot.adapter.client.rtm.dataStore.getUserById('U0MU03G5V').name
# => knjcode
※ メソッド名末尾がID ⇒Id に変わってる点も注意
15. 10 . 4
getChannelGroupOrDMByID ⇒
getChannelGroupOrDMById
メソッド名およびメソッド位置の変更
hubot-slack v3
robot.adapter.client.getChannelGroupOrDMByID('C03NM270D').name
# => general
hubot-slack v4
robot.adapter.client.rtm.dataStore.getChannelGroupOrDMById('C03NM270D'
# => general
※ メソッド名末尾がID ⇒Id に変わってる点も注意
17. 10 . 6
getDMByName
hubot-slack v3の メソ
ッドから が分離
hubot-slack v3
robot.adapter.client.getChannelGroupOrDMByName('knjcode').id
# => U0MU03G5V
hubot-slack v4
robot.adapter.client.rtm.dataStore.getDMByName('knjcode').id
# => U0MU03G5V
19. 11
ユーザプロフィール等の参照
v4では が参照できなくなった
(例えば、ユーザアイコンを取得する場合等に利用)
hubot-slack v3
userId = msg.envelope.user.id
robot.brain.data.users[userId].slack.profile.image_48
# => "https://a.slack-edge.com/2fac/plugins/slackbot/assets/service_48.png"
hubot-slack v4
uesrId = msg.envelope.user.id
robot.adapter.client.rtm.dataStore.users[userId].profile.image_48
# => "https://a.slack-edge.com/2fac/plugins/slackbot/assets/service_48.png"
※ hubot-slack v4.3.0 からhubot-slack v3互換となった
( を参照できるようになった)
20. 12
Slack Web APIの呼び出し方法について
v3では が利用できた(そもそもhubot-slack内部
メソッドなのであまり使うべきではないですが…)
hubot-slack v3
robot.adapter.client._apiCall 'chat.postMessage',
channel: msg.envelope.room
text : 'hello'
hubot-slack v4
robot.adapter.client.web.chat.postMessage(msg.envelope.room, 'hello')
v4からは 配下にある
Slack SDKのWebAPI用メソッドを利用できる
(もちろん、自前でAPI呼び出ししてもよい)
23. 13 . 3
メソッド位置の変更
メソッド位置も変更されました
hubot-slack v3
robot.adapter.client.on 'raw_message', (msg) ->
if msg.type is 'presence_change'
console.log msg
hubot-slack v4
robot.adapter.client.rtm.on 'raw_message', (msg) ->
message = JSON.parse msg
if message.type is 'presence_change'
console.log message
24. 14 . 1
ファイルアップロード
v4からはファイルアップロードに対応しました
(Slack SDKを内部的に利用しているだけですが)
lenna.pngをアップロードする例
robot.hear /lenna/i, (msg) ->
data =
file: fs.createReadStream('lenna.png')
channels: msg.envelope.room
robot.adapter.client.web.files.upload("lenna.png", data)
26. 14 . 2
15
リアクション
v4からはreactions用の が追加されました
(v4.1.0から)
ユーザがつけたリアクションをオウム返しする例
robot.react (msg) ->
robot.logger.debug msg.message.type, msg.message.reaction
if msg.message.type == "added"
data =
channel: msg.message.item.channel
timestamp: msg.message.item.ts
robot.adapter.client.web.reactions.add(msg.message.reaction, data)
27. 16
参考
Slack Developer Kit for Hubot - Upgrading from a Previous Version
Slack Developer Kit for Hubot - Basic Usage
slack-api/hubot-slack
slack-api/node-slack-sdk