Mais conteúdo relacionado
Semelhante a IoT ChatOps #IoTLT (20)
IoT ChatOps #IoTLT
- 8. module.exports = (robot) ->
exec = require('child_process').exec
Slack = require 'slack-node'
slack = new Slack process.env.SLACK_API_TOKEN
DIR = '/tmp/'
processing = false
robot.hear /camera/i, (msg) ->
if processing
return msg.send "busy..."
processing = true
channel = msg.message.room
fileName = "#{getNow()}.jpg"
console.log "rcv"
exec "fswebcam -S 50 -r 1920x1080 --no-banner #{DIR}#{fileName}", (err, stdout, stderr) ->
if err
processing = false
return msg.send "Failed " + err
msg.send "Camera finished, Please wait a minute..."
postSlack channel, fileName, (err, res) ->
processing = false
if err
return msg.send "Failed " + err
console.log "OK"
postSlack = (channel, fileName, callback) ->
getChannelFromName channel, (err, id) ->
if err
return callback err
exec "curl -F file=@#{DIR}#{fileName} -F channels=#{id} -F
token=#{process.env.SLACK_API_TOKEN} https://slack.com/api/files.upload", (err, stdout,
stderr) ->
exec "rm -f #{DIR}#{fileName}", (err, stdout, stderr) ->
if err
console.log "failed to delete file"
if err
return callback err
callback null, 'OK'
getChannelFromName = (channelName, callback) ->
slack.api "channels.list", exclude_archived: 1, (err, response) ->
if err
return callback err
if !response.ok
return callback response.error
for val, i in response.channels
if val.name == channelName
return callback null, val.id
return callback err
getNow = () ->
date = new Date
y = date.getFullYear()
m = date.getMonth() + 1
d = date.getDate()
h = date.getHours()
M = date.getMinutes()
s = date.getSeconds()
return "#{y}#{m}#{d}#{h}#{M}#{s}"
64行のCoffeeScript