(ãã¿)Slackï¼Hubotã§ãã¡ã¤ã«ã¢ãããã¼ããã話
æ·±é ãªçç±*1ã«ãããã¡ã¤ã«ã¢ãããã¼ããSlackçµç±ã§è¡ãããã
ã¢ãããã¼ãå
ã¯AWS S3ãªã®ã§ãããããã§ã¯AWSã®ä¸çã«ãã¡ã¤ã«ãæã¡è¾¼ãã¾ã§ãæ¸ãã¾ãã
æ®éããã¡ã¤ã«ã¢ãããã¼ããããã¨ãªãã°å
¥ãå£ã¨ãã¦Webãµã¼ãçãªãã®ãå¿
è¦ã§ããã
ã¡ãã£ã¨ããè¦ä»¶ã«ã¯ã»ãã¥ãªãã£ã³ã¹ããé«ãã¤ãã¦é¢åã
SlackãGithubã¨ãã£ãæ¢ã«å©ç¨ãã¦ããå¤é¨ãµã¼ãã¹ã«ä¹ã£ããã°ãã®è¾ºã®ã³ã¹ããçç¥ã§ããã
ã¨ããã®ãå¾ä»ã®çãã
ã©ããããã¨ããã¨ãSlackã®ãã¡ã¤ã«ã¢ãããã¼ãæ©è½ã§ã¢ãããã¼ããã¾ãã
ãã®éã«ã³ã¡ã³ãã«ç¹å®ã®ãã¼ã¯ã¼ããä»ä¸ããã¨ã
Hubotãè£ã§ãã¡ã¤ã«ãã¦ã³ãã¼ããã¦S3ã«ã¢ãããã¼ããã¾ãã
Hubotã¯AWSã®ä¸ã«ããåæã§ããç°¡åã»å¼·å¼ãªä»æ§ã
hubot-slackã«ã¯ããããæ©è½ã¯ãªãã®ã§ãçã®Adapterã§æ¸ãã¾ãã
è¦ç¹æç²ã®ã½ã¼ã¹ã¯ä»¥ä¸ã
request = require 'request' fs = require 'fs' module.exports = (robot) -> robot.adapter.client?.on? 'raw_message', (msg) -> if msg.type is 'message' and msg.subtype is 'file_share' and msg.text.match(/uploaded a file: \<\S+\> and commented: !fileupload/) filename = msg.file.url_download.split('/').pop() filepath = "work/#{filename}" file = fs.createWriteStream(filepath) channel = robot.adapter.client.getChannelByID msg.channel request .get(msg.file.url_download) .on 'error', (err) -> console.log "#{err}" .pipe(file) .on 'close', (resp) -> # post process robot.send {room: channel.name}, "<@#{msg.user}>: Complete file download: #{filename}"
ã¢ãããã¼ãã®éã®ã³ã¡ã³ãã¯ã
ãuploaded a file: <filename> and commented: (comment)ã
ã¨ããå½¢ã«ãªãã®ã§æ³¨æãå¿
è¦ã
ä¸è¨ã®ä¾ã§ã¯ã³ã¡ã³ãã«ã!fileuploadãã¨ä»ããã°å®è¡ããã¾ãã
工夫ããã°è¤æ°ã®ã¢ãããã¼ãå
ãå¶å¾¡ã§ãããã
mgs.file.url_download ã§Slackã«ã¢ãããã¼ããããURLãåããã®ã§ããã¦ã³ãã¼ããã¾ãã
ãã®ä¾ã§ã¯request使ã£ã¦ã¾ããå¾ã¯ä¼¼ããªãç¼ããªãã
adapter.clientã使ãã®ã§channelã¨ãuserã¯èªåã§åå¾ããå¿
è¦ãããã¾ãã
æ¬ ç¹ã¨ãã¦ããã¡ã¤ã«ã¢ãããã¼ããå¥ã®å ´æ(S3ã¨ã)ã«ãããã®ã«Slackã«ãæ®ã£ã¦ãã¾ãã
çµãã£ããåé¤ãããã£ãã®ã ãBotã ã¨åé¤ã§ããªããããã
ãã¡ã¤ã«ãµã¤ãºã¨ããå±éºãªã®ã§ä¸éããã§ãã¯ããããã«ã¯ãã¦ã¾ãã
å¾ã¯ãã¡ã¤ã«ãéè¤ããªãããã«tmpdirä½ã£ããçµãã£ããæ¶ãããã
ç´°ããæã¯å²æãã¦ã¾ããã±ã¢å¿
è¦ã§ãã
*1:ãSlackãããµã¯ãã¨ãã¡ã¤ã«ã¢ãããã¼ãã§ãããããªãã®ï¼ãã¨è¨ãããã¨ã