add deepfry script
This commit is contained in:
parent
5f714392ea
commit
875a1b6eeb
94
scripts/deepfry.coffee
Normal file
94
scripts/deepfry.coffee
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# Description:
|
||||||
|
# deep fry an image
|
||||||
|
#
|
||||||
|
# Commands:
|
||||||
|
# hubot deepfry/friggi[mi] <url>
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# "async": "^1.4.2",
|
||||||
|
# "hubot-matrix": "rnhmjoj/hubot-matrix",
|
||||||
|
# "needle": "^0.10.0",
|
||||||
|
#
|
||||||
|
# Configuration:
|
||||||
|
# None
|
||||||
|
#
|
||||||
|
# Author:
|
||||||
|
# Michele Guerini Rocco (rnhmjoj)
|
||||||
|
|
||||||
|
ne = require 'needle'
|
||||||
|
async = require 'async'
|
||||||
|
gm = require 'gm'
|
||||||
|
url = require 'url'
|
||||||
|
|
||||||
|
module.exports = (robot) ->
|
||||||
|
# utilities
|
||||||
|
concat = (x) -> [].concat.apply([], x)
|
||||||
|
init = (x) -> (f) -> f(null, x)
|
||||||
|
times = (n, x) -> x for i in [1..n]
|
||||||
|
rand = (min, max) -> Math.random() * (max - min) + min
|
||||||
|
|
||||||
|
# effects
|
||||||
|
compress = (image, callback) ->
|
||||||
|
gm(image)
|
||||||
|
.noProfile()
|
||||||
|
.quality(rand(25,40))
|
||||||
|
.colorize(rand(0,5),rand(0,5),rand(0,5))
|
||||||
|
.toBuffer callback
|
||||||
|
|
||||||
|
resize = (image, callback) ->
|
||||||
|
gm(image)
|
||||||
|
.resize(260000, '@>')
|
||||||
|
.resize('40%')
|
||||||
|
.resize('500%')
|
||||||
|
.toBuffer callback
|
||||||
|
|
||||||
|
colorize = (image, callback) ->
|
||||||
|
gm(image)
|
||||||
|
.modulate(rand(110,200), rand(100,110))
|
||||||
|
.toBuffer callback
|
||||||
|
|
||||||
|
deepFry = (res, image) ->
|
||||||
|
script = concat [
|
||||||
|
init(image),
|
||||||
|
resize,
|
||||||
|
times(40, compress),
|
||||||
|
colorize
|
||||||
|
]
|
||||||
|
|
||||||
|
async.waterfall script, (err, image) ->
|
||||||
|
if err?
|
||||||
|
robot.logger.warning "frying failed:\n#{err}"
|
||||||
|
return res.send 'scusa, si è rotta la friggitrice.'
|
||||||
|
|
||||||
|
# send image
|
||||||
|
robot.logger.info 'image fried successfully'
|
||||||
|
robot.adapter.sendImage
|
||||||
|
room: res.message.room
|
||||||
|
, image, 'fried.jpeg', ->
|
||||||
|
res.reply res.random [ 'meme fritto per te.', 'eccoti servito.']
|
||||||
|
|
||||||
|
|
||||||
|
robot.respond /(?:deepfry|friggi(?:mi)?) (questo|.+)/i, (res) ->
|
||||||
|
if not url.parse(res.match[1]).hostname
|
||||||
|
return res.send res.random [ 'non si usa così.', 'è un url questo?', 'cosa?' ]
|
||||||
|
imageURL = res.match[1]
|
||||||
|
|
||||||
|
# supported image mime types
|
||||||
|
accepted = ['image/jpeg', 'image/png', 'image/tiff']
|
||||||
|
|
||||||
|
# fetch headers
|
||||||
|
ne.head imageURL, follow_max: 5, (err, re) ->
|
||||||
|
if err?
|
||||||
|
robot.logger.warning "headers download failed:\n#{err}"
|
||||||
|
return res.send 'non riesco ad aprire il link.'
|
||||||
|
|
||||||
|
mimetype = re.headers['content-type'].split(';')[0]
|
||||||
|
if not (mimetype in accepted)
|
||||||
|
robot.logger.info 'url is not an image'
|
||||||
|
return res.send "non è un'immagine questo!"
|
||||||
|
|
||||||
|
# download and process
|
||||||
|
robot.logger.info 'downloading image...'
|
||||||
|
ne.get imageURL, follow_max: 5, (err, re, body) ->
|
||||||
|
robot.logger.info 'image downloaded'
|
||||||
|
deepFry res, body
|
Loading…
Reference in New Issue
Block a user