# Description: # deep fry an image # # Commands: # hubot deepfry/friggi[mi] # # 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() .noise('uniform') .quality(rand(30,80)) .noise('uniform') .toBuffer callback resize = (image, callback) -> gm(image) .scale('95%') .scale('105%') .toBuffer callback colorize = (image, callback) -> gm(image) .modulate(rand(100,110), rand(100,150)) .toBuffer callback deepFry = (res, image) -> script = concat [ init(image), resize, colorize times(50, compress), ] 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