hubot-scripts
Version:
Allows you to opt in to a variety of scripts
48 lines (41 loc) • 1.54 kB
text/coffeescript
# Description:
# Allows Hubot to speak many languages
#
# Dependencies:
# None
#
# Configuration:
# HUBOT_MSTRANSLATE_APIKEY
#
# Commands:
# speak me <phrase> - Detects the language 'phrase' is written in, then sends back a spoken version of that phrase
#
# Author:
# atmos
module.exports = (robot) ->
robot.hear /(speak)( me)? (.*)/i, (msg) ->
term = "\"#{msg.match[3]}\""
apiKey = process.env.HUBOT_MSTRANSLATE_APIKEY
langs = ["en"]
getLanguagesForSpeak = "http://api.microsofttranslator.com/V2/Ajax.svc/GetLanguagesForSpeak"
detect = "http://api.microsofttranslator.com/V2/Ajax.svc/Detect"
speak = "http://api.microsofttranslator.com/V2/Ajax.svc/Speak"
unless apiKey
msg.send "MS Translate API key isn't set, get a key at http://www.bing.com/developers/appids.aspx"
msg.send "Then, set the HUBOT_MSTRANSLATE_APIKEY environment variable"
return
msg.http(getLanguagesForSpeak)
.query({ appId: apiKey })
.get() (err, res, body) ->
langs = eval(body) unless err
msg.http(detect)
.query({appId: apiKey, text: term})
.get() (err, res, body) ->
if err or (langs.indexOf(eval(body)) == -1)
msg.send "Sorry, I can't speak #{err or eval(body)}"
return
lang = eval(body)
msg.http(speak)
.query({ appId: apiKey, text: term, language: lang, format: "audio/wav" })
.get() (err, res, body) ->
msg.send(eval(body)) unless err